解決策 1:
重要なのは、CentOS が anacron
から /etc/cron.{daily,weekly,monthly} でスクリプトを実行することを知っていることです。 ... /etc/anacrontab
RANDOM_DELAY
を設定しています 、これは期待どおりの動作をします (最大 RANDOM_DELAY
まで遅延します) ジョブ開始の数分前)...
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
設定 RANDOM_DELAY=0
/ START_HOURS_RANGE=3
問題を修正しました...
編集
さらに考えた結果、anacron
を削除します。 通常の vixie cron
をインストールします ...
解決策 2:
答えではありませんが、最近、別の理由でこれを理解しようとしていたところ、Redhat 6、Centos などで cron を実行する方法に関するドキュメントが見つかりませんでした。これが私がリバースエンジニアリングしたものです:
<オール>crond
システムの起動時に引き続き実行されます - /etc/cron.d
のすべてのファイルをロードします /etc/cron.d/0hourly
/etc/cron.hourly
のすべてのファイルを実行します /etc/cron.hourly/0anacron
anacron
を実行します /etc/anacrontab
を読み込みます /etc/anacrontab
実行 (run-parts
経由) ) /etc/cron.daily
、 /etc/cron.weekly
と /etc/cron.monthly
そのため、以前のバージョンよりも複雑です。
/etc/crontab
に時間単位、週単位、月単位のエントリを追加することで、以前の動作を復元することができます。 (今は空です)、しかし anacrontab
更新も必要になります。これにより、将来の更新が中断される場合と中断されない場合があります...
解決策 3:
どのようにをカバーする他の回答 しかし必ずしも理由ではない . 理由 同時の毎晩の cron ジョブがインフラストラクチャを停止させないようにすることです。 (共有ストレージ、または 1 つの VM ホストで実行されている 1000 台のサーバー、またはネットワーク サービスにヒットする夜間のジョブを想像してみてください。)
特定のログ ローテーション ジョブを cron.daily
から移動することで、システム固有のログ ローテーションに関するこの問題を常に解決します。 cron.d
でハードコーディングされた時刻を持つエントリに .そうすれば、時間は実際には重要ではないが、ログ ローテーションの一貫した時間である updateb などのサービスの実行時間をずらして取得できます。
もちろん、特定のサイズに達したら、とにかくすべてのログをホストからログサーバーに送信する必要があります。個々のノード上のファイルのローテーション時間はそれほど重要ではありません。利便性(通常はファイルの末尾に従います)または最後の手段としてのフォールバックとして。そうすれば、間違いなく ログ サーバーのローテーションを体系的に設定します。