私は毎日UTCタイムの午前9:00に実行されるcronjobを持っています。私はGMT + 1にいるので、現地時間の午前10:00に実行されます。 (夏時間(DST)への)タイムゾーンの変更がある場合、cronjobは引き続きUTC-Timeの午前9:00に実行されますが、現地時間の午前11:00に実行されます。しかし、夏時間に関係なく、常に10:00に実行したいです。それ、どうやったら出来るの?
/ etc/timezoneで設定を確認してください。あなたが「GMT + 1」にいると言った質問で、それがタイムゾーンに設定されている場合、スクリプトは常にUTC + 1時間で実行されます。たとえば、 「ヨーロッパ/パリ」では、夏時間により実行時間が変わります。
これはお使いのOSとcron
の実装によって異なる可能性があります。これは、最も一般的なcron実装_vixie/isc cron
_では不可能です。 crontab(5) manpage
から:
_LIMITATIONS
The cron daemon runs with a defined timezone. It currently does not
support per-user timezones. All the tasks: system's and user's will
be run based on the configured timezone. Even if a user specifies
the TZ environment variable in his crontab this will affect only
the commands executed in the crontab, not the execution of the crontab
tasks themselves.
_
@Cyrusの答えを拡張すると、これは私がやったことです:
UTCオフセットをチェックするスクリプトを作成しました。
#!/bin/bash
export TZ=":US/Eastern"
if [ "$(date +%z)" == "$1" ]; then
shift
exec $@
fi
次に、必要なオフセットごとに2つのcrontabエントリを追加します。
0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here
マニュアルページから:
デーモンは、存在する場合、タイムゾーンの
/etc/timezone
からの定義を使用します。環境はユーザーのcrontab定義で再定義できますが、cronは単一のタイムゾーンでのみタスクを処理します。
Cronjobを8:00に移動し、GMT + 1の場合は1時間スリープします
0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here