web-dev-qa-db-ja.com

cronのタイムゾーンの問題

私のcronジョブは、サーバー時間と比較して1時間後に計算されます。何が起こっているのかわかりません。

私の設定は次のとおりです:

サーバー時間 :

Europe/Paris

/ etc/default/cronに次の行を追加しました:

TZ="Europe/Paris"

それにもかかわらず、cronジョブはサーバー時間より1時間遅れて起動されます。本当にトリッキーなのは、cronに「date」という命令を実行するように依頼すると、サーバーの日付が表示されることです(良い日付です!)。

この問題を解決する方法はわかりません。私はフォーラムでいくつかの読書をしてきましたが、興味深いものは何も見つかりませんでした。

どう思いますか ?

11

(解決策であることが判明したので、私のコメントを回答としてコピーしました。私は正しいと思いました。)

したがって、cronジョブはUTCでスケジュールされています(Europe/ParisはUTCから1時間オフセットされています)。

Vixie cronのmanページにはこう書かれています:

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

/etc/timezoneには何がありますか? cronプロセスが開始されてから/etc/timezoneを最近変更しましたか?やってみました

/etc/init.d/cron restart

16
Keith Thompson

Fedoraなどの一部のディストリビューションでは、CRON_TZ=を設定してデフォルトのタイムゾーンを上書きできるメカニズムを提供しています。

Fedoraからman 5 crontab

CRON_TZ変数は、cronテーブルに固有のタイムゾーンを指定します。ユーザーは、指定されたタイムゾーンに従って時間をテーブルに入力する必要があります。ログファイルへの書き込みに使用される時間は、デーモンが実行されているローカルタイムゾーンから取得されます。

このようなもの:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash
3
slm

Cronの再起動が必要でしたが、私にとってはコマンドは

/etc/init.d/crond restart (crond not cron)
1
arx-e

ウィキペディアは言う

ほとんどのcron実装は、cronデーモン自体が実行されているシステムのタイムゾーン設定のcrontabエントリを単に解釈します。大規模なマルチユーザーマシンに複数のタイムゾーンのユーザーがいる場合、特にシステムのデフォルトのタイムゾーンに混乱を招く可能性のあるDSTが含まれている場合、これは論争の原因となる可能性があります。したがって、cron実装は、ユーザーのcrontab内の「TZ =」環境変数設定行を特殊なケースにして、そのタイムゾーンに関連する後続のcrontabエントリを解釈する場合があります。

それで、おそらくあなたのログインIDには、システムのTZ設定とは異なるTZ設定がありますか?

1
RedGrittyBrick

Ubuntu 14/16でこれを理解しました。私には完璧に働きました。

手順(Sudoを含む):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone
0
Varun Chandak