web-dev-qa-db-ja.com

CentOSのlogrotateがランダムに実行されるのはなぜですか?

logrotate構成ファイルを/etc/logrotate.d/そして、ログが一定の時間にローテーションすることを期待しました。ただし、そうではありません...ログのローテーション時間は、ランダムに見えるようです+/- 1時間。

ログローテーションの開始時刻がランダムになるのはなぜですか?これを変更するにはどうすればよいですか?


/opt/backups/network/*.conf {
        copytruncate
        rotate 30
        daily
        create 644 root root
        dateext
        maxage 30
        missingok
        notifempty
        compress
        delaycompress
        postrotate
            ## Create symbolic links in daily/
            PATH=`/usr/bin/dirname $1`;
            FILE=`/bin/basename $1`;
            /bin/ln -s $1 $PATH/daily/$FILE
        endscript
}
10
Mike Pennington

重要なのは、CentOSがanacron...から/etc/cron.{daily,weekly,monthly}でスクリプトを実行することを知っていることです。/etc/anacrontabRANDOM_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...をインストールします。

10
Mike Pennington

答えではありませんが、最近私は別の理由でこれを理解しようとしており、Redhat 6、Centosなどがcronを実行する方法に関するドキュメントを見つけることができませんでした。これが私がリバースエンジニアリングしたものです:

  1. crondは引き続きシステムの起動時に実行されます-/etc/cron.d内のすべてのファイルをロードします
  2. /etc/cron.d/0hourly/etc/cron.hourly内のすべてのファイルを実行します
  3. /etc/cron.hourly/0anacronanacronを実行します
  4. anacronは/etc/anacrontabをロードします
  5. /etc/anacrontabが実行されます(run-parts経由)/etc/cron.daily/etc/cron.weeklyおよび/etc/cron.monthly

そのため、以前のバージョンよりも複雑です。

毎時、毎週、毎月のエントリを/etc/crontab(現在は空)に追加することにより、以前の動作を復元することは可能ですが、anacrontabも更新する必要があります。これは将来のアップデートを壊すかもしれないししないかもしれません...

6
AngerClown

他の回答はhowをカバーしていますが、必ずしもwhyではありません。 理由は、毎晩のcronジョブが同時にインフラストラクチャを強制終了しないようにするためです。 (共有ストレージ、または1つのVMホストで実行されている1000台のサーバー、またはネットワークサービスにヒットする夜間ジョブを想像してください。)

特定のログローテーションジョブをcron.dailyからcron.dにハードコードされた時間を含むエントリに移動することにより、特定のログローテーションに関するこの問題を常に解決します。このようにすると、updatedbのようなサービスの実行時間は実際には重要ではありませんが、ログローテーションの時間は一貫しています。

もちろん、特定のサイズに達したら、すべてのログをホストからログサーバーに送信し、個々のノード上のファイルのローテーション時間はそれほど重要ではありません。利便性(通常はファイルの末尾に続く)または最後の手段としてのフォールバックとして。次に、間違いなくログサーバーのローテーションを体系的に設定します。

4
mattdm