Cron ジョブはシステム時間と完全に一致せず、1 時間遅れて実行されます。

Cron ジョブはシステム時間と完全に一致せず、1 時間遅れて実行されます。

問題の例:

* 9 * * * echo 9
* 10 * * * echo 10

上記の場合、ユーザーに 1 分ごとに電子メールが送信されますが、すべての「9」の応答は午前 10:00 -> 午前 10:59 に発生し、「10」は午前 11:00 -> 午前 11:59 に届きます。

ジョブの実行

* * * * * /bin/date ; /bin/date -u

予想された (正しい) 日付と時刻が返されました。これは、UTC と現地時間 (アメリカ/デンバー) の両方に当てはまります。このジョブを特定の時間に毎分実行するように変更すると、オフセットが発生します (9 時に実行するように指示されたジョブは 10 時に実行されるなど)。

現在完了しているデバッグ:

なるほど、それはおかしいですね。タイムゾーンファイルがおかしくなっているのでしょうか?確認してみましょう

diff -s /etc/localtime /usr/share/zoneinfo/`cat /etc/timezone`
Files /etc/localtime and /usr/share/zoneinfo/America/Denver are identical

ハードウェア クロックをチェックして、これがオフになっているか、または何らかの理由でローカル設定 (root として実行) と一致していないかどうかを確認しました。

date ; hwclock
Wed Oct 26 10:50:13 MDT 2016
Wed 26 Oct 2016 10:50:14 AM MDT  -0.204171 seconds

1 秒ずれているように見えますが、これによって cron ジョブがスケジュールから 1 時間遅れて実行されることはないはずですよね?

私は次のことにも確信を持っています。

  • 最近タイムゾーンが変わりましたか?いいえ
  • とにかくタイムゾーンを手動で修正してみましたか?はい
  • タイムゾーンを修正した後、cron をリセットしましたか?はい
  • cron サービスが再起動されたことを確認しましたか?はい
  • cron サービスを再起動しましたか?はい
  • cron が再起動されたことを本当に確認していますか?Cronが再起動されたことは100%確実

その他の関連情報:

Debian を実行しています。

cat /etc/debian_version
8.6

現在のカーネル

uname -a
Linux BigBox 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux

デバッグを更新しました:

'hwclock --systohc' を実行しましたが、動作に目立った変化はありませんでした。確認するにはこのコマンドを実行しました。

date;hwclock
Wed Oct 26 12:39:09 MDT 2016
Wed 26 Oct 2016 12:39:11 PM MDT  -0.875328 seconds

このファイルが存在しないため、「cat /etc/sysconfig/clock」を実行できません。/etc/ ツリーの下で find コマンドを実行して「clock」を検索すると、そこにその名前のファイルが存在しないことが確認できます。

私が知っている限りで CRON_TZ 変数を設定しているものがあるかどうか確認しました。ユーザー レベルでもルート レベルでも設定されていません。cron でエコー出力しても何も出力されません。

答え1

もう一つ確認すべき場所は、 の起動時に実行されるスクリプトcron、または旧式のシステム crontab ファイルです/etc/crontab。 TZ 環境変数は、たとえば または に設定されている可能性があります/etc/init.d/cronie/lib/systemd/system/crond.service、Debian が init システムに何を使用しているかはわかりません。

crond1 時間おきに実行しようとしたときに、次のような結果が出ました。

0 */2 * * * /opt/dbms/rainstor/archiving/ama_term

crondスクリプトを奇数時間に実行しました。夏時間の混乱が原因ではないかと疑っていましたが、自分では証明できませんでした。

関連情報