Cronジョブを現地時間ではなくGMTで実行するにはどうすればよいですか?
これは私のcrontabファイルです:
#m h d m wday command
TZ=GMT
5 0,6,12,18 * * * ~/Documents/bash/transfer.sh
ジョブは現地時間(GMT + 11)で実行されているようです。osxsnowleopardを実行していますが、開発が完了するとコードがLinuxに移動します。
Linux環境は、構成をあまり制御できない共有環境である可能性があります。
cron
のすべてのバージョンが、システム以外のタイムゾーンを使用したジョブの実行をサポートしているわけではありません。
もしそうなら、仕様はTZ=GMT
またはTZ=UTC
(山かっこなし)である可能性があります。場合によっては、変数はCRON_TZ
になります。
最善の方法は、特定のシステムに固有のドキュメントを確認することです。 man 5 crontab
を参照してください。
現地時間がEurope/London
の場合。次に:
crontab -e # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 3 * * * [ "$(date +\%z)" = "+0000" ] && COMMAND
15 4 * * * [ "$(date +\%z)" = "+0100" ] && COMMAND
<<<
もう一つの例:
通常の時間が+0500
シフトのUTC
であり、季節の時間が+0600
シフトのUTC
である場合。次に、上記の例で指定したすべての時間に+5
を追加します。これは、それぞれ現地時間の08:15am
と09:15am
で実行されることを意味します。したがって、変更したcron行は次のようになります。
crontab -e # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 8 * * * [ "$(date +\%z)" = "+0500" ] && COMMAND
15 9 * * * [ "$(date +\%z)" = "+0600" ] && COMMAND
<<<
[編集] crontabファイル内の任意のパーセント\
文字を必ず%
エスケープしてください。 crontabはそれらを改行区切り文字として解釈します。例えば%
-> \%
。
おそらく、元のcrondバイナリをラップすることができます。
mv /usr/sbin/crond /usr/sbin/crond.real
cat > /usr/sbin/crond
#!/bin/sh
TZ=GMT
export TZ
exec crond.real ${1+"$@"}