先週末は時間を02:00から03:00に変更する必要がありました。
質問:02:30にcronjobがあればどうなりますか?
crondはおそらくこれを処理する必要がありますが、方法がわからない非常に古いスケジューリングソリューションです。
答え1
これはcronの実装によって異なりますが、人気のあるVixie cronはマニュアルに次のように記載されています。
その後、cronは1分ごとに起動し、保存されているすべてのcrontabをチェックし、各コマンドをチェックして、現在の分で実行する必要があることを確認します。
そして
夏時間が始まったり終わったりするなど、時計が3時間未満に変更される場合は、特別な注意が必要です。時間が早くなると、スキップされた時間に実行されたジョブは変更後すぐに実行されます。逆に、時間が3時間未満に移動すると、重複した時間に対応するジョブは再実行されません。
特定の時間(@hourlyで指定されていない、または時間または分指定子に「*」を使用しない)で実行されるジョブのみが影響を受けます。ワイルドカードを使用して指定されたジョブは、新しい時刻に基づいてすぐに実行されます。
DSTが3時間以内に変更されたため、プログラムは午前3時直後に実行されます。
これがVixie cronの特定の動作であるかどうかはわかりません。 80年代にPDP-11がこのように機能したことを覚えているようですが、わかりません。
答え2
最善の解決策は、ハードウェア時計を協定世界時(UTC)に設定してコンピュータを実行することです。GMTまたはZulu時間とも呼ばれるそして、夏時間が適用されるようにローカルタイムゾーンを設定して時間表示方法を変更するだけです。
SUSE Linuxとおそらく他のほとんどのLinuxでは、ハードウェアクロックシステム->環境->時計->HWCLOCK-uフラグを使用してUTCに設定し、タイムゾーンをその場所に設定すると、システムは自動的にDST変更によってローカル時間を表示します。
ここには多くの利点があります。
- DST の変更に応じて時計を手動で調整する必要はなくなりました。
- CRON タブは UTC 時間で保存して実行します。
- あるファイル(ログなど)がDST終了前01:30に記録され、他のファイルがDST終了後01:20に記録されている場合、そのファイルは他のファイルよりも「最新」です。ファイルタイムスタンプはUTCで、表示時の現在のタイムゾーンに基づいて表示されるように単純に変換されます。
詳しくはman hwclock
端末に入力してください。