web-dev-qa-db-ja.com

現地時間ではなくGMTでcronジョブを実行する方法は?

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環境は、構成をあまり制御できない共有環境である可能性があります。

8
compound eye

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:15am09: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はそれらを改行区切り文字として解釈します。例えば%-> \%

3
Dreamcat4

おそらく、元のcrondバイナリをラップすることができます。

mv /usr/sbin/crond /usr/sbin/crond.real
cat > /usr/sbin/crond
#!/bin/sh
TZ=GMT
export TZ
exec crond.real ${1+"$@"}
0
hlovdal