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


8

cronジョブを現地時間ではなくGMTで実行するにはどうすればよいですか?

これは私のcrontabファイルです:

#m  h           d   m   wday    command
TZ=GMT
5   0,6,12,18   *   *   *   ~/Documents/bash/transfer.sh

私のジョブは現地時間(GMT + 11)で実行されているようです。osx snow leopardを実行していますが、開発が完了するとコードがLinuxに移動します。

Linux環境は、私が設定をあまり制御できない共有環境かもしれません。



回答:


8

すべてのバージョンがcron、システム以外のタイムゾーンを使用したジョブの実行をサポートしているわけではありません。

あなたがそうするなら、それは仕様がそうであるべきであるTZ=GMTTZ=UTC(山括弧なしで)です。場合によっては、変数はになりますCRON_TZ

最善の方法は、特定のシステムに固有のドキュメントを確認することです。を参照してくださいman 5 crontab


3

現地時間の場合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がそれらを改行区切り文字として解釈するため。例%-> \%


1
DSTを使用するタイムゾーンにいると問題が発生するため、(たとえば)タイムゾーンが+01:00やsomethimes +02:00になる場合があります
inemanja

2
おそらくあなたは詳しく説明できますか?私はそうは思いません。すでに夏時間を考慮しています。それぞれのケースには独自のcron行があります。DSTあり/なしのそれぞれに1つ。
Dreamcat4

それはindividiulコマンド異なる動作が可能になりますので、これは、受け入れ答えなければなりません
パトリック・マッキャン

0

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

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

こんにちはhlovdal、これらの手順を説明していただけますか?
複眼

crondをcrond.realにコピーしてから、crondをTZを設定してエクスポートし、crond.realを実行する短いスクリプトに置き換えていますか?
複眼

コピーではなく移動ですが、はい、残りの分析は正しいです。
hlovdal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.