cronジョブのタイムゾーンを変更する


10

私は毎日UTCタイムの午前9:00に実行されるcronjobを持っています。私はGMT + 1にいるので、現地時間の午前10:00に実行されます。(夏時間(DST)への)タイムゾーンの変更がある場合、cronjobは依然としてUTC-Timeの午前9:00に実行されますが、現地時間の午前11:00に実行されます。しかし、夏時間に関係なく、常に10:00に実行したいです。それ、どうやったら出来るの?


4
この質問はStackOverflowのにクロスポストされていますstackoverflow.com/questions/29592533/...
John1024

/ etc / timezoneで設定されているタイムゾーンは何ですか?
Twinkles

回答:


2

/ etc / timezoneで設定を確認してください。あなたが「GMT + 1」にいると言った質問で、それがタイムゾーンに設定されている場合、スクリプトは常にUTC + 1時間で実行されます。たとえば、 "Europe / Paris"に設定すると、サマータイムに応じて実行時間が変わります。


6

これはお使いの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.

2

@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

1

マニュアルページから:

デーモンは、存在する場合/etc/timezone、タイムゾーンの定義を使用します。

環境はユーザーのcrontab定義で再定義できますが、cronは単一のタイムゾーンでのみタスクを処理します。


1

cronjobを8:00に移動し、GMT + 1の場合は1時間スリープします

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here

TZが北米の場合はどうなりますか?
swdev '15年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.