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


10

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

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


情報:私のlogrotate設定ファイルは次のようになります...

/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

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


サーバーが何らかの理由でanacronの実行が想定されているときにオフになっている場合、システムの起動後のいつかで実行されることに注意してください。したがって、ログローテーションを別の時間として取得することもできます。おそらく大きな問題ではありませんが、注目に値します。
AngerClown、

START_HOURS_RANGEを単一の値(= 3)に設定すると、この変数は単一の数値ではなく範囲を期待するため機能しません。したがって、上記の例では3〜4になります。
Slavik 2018

6

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

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

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

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


4

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.