Mengapa CentOS logrotate saya berjalan secara acak?

10

Saya memasukkan logrotatefile konfigurasi /etc/logrotate.d/dan mengharapkan log untuk berputar pada waktu yang konsisten; namun, mereka tidak ... waktu rotasi log tampaknya acak +/- satu jam.

Mengapa rotasi waktu mulai log acak, dan bagaimana saya bisa mengubahnya?


Informasi: file konfigurasi logrotate saya terlihat seperti ini ...

/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
}
Mike Pennington
sumber

Jawaban:

10

Kuncinya adalah mengetahui bahwa CentOS menjalankan skrip di /etc/cron.{daily, setiap minggu} setiap bulan dari anacron... /etc/anacrontabadalah pengaturan RANDOM_DELAY, yang melakukan apa yang Anda harapkan (penundaan hingga RANDOM_DELAYbeberapa menit sebelum memulai pekerjaan) ...

# /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

Mengatur RANDOM_DELAY=0/ START_HOURS_RANGE=3memperbaiki masalah ...

EDIT

Setelah berpikir lebih jauh, saya akan menghapus anacrondan menginstal vixie normal cron...

Mike Pennington
sumber
Ingat bahwa jika server Anda tidak aktif karena suatu alasan ketika anacron seharusnya dijalankan, itu akan berjalan ketika beberapa saat setelah sistem dinyalakan. Jadi Anda masih bisa mendapatkan rotasi log seperti waktu yang berbeda. Mungkin bukan masalah besar, tapi patut dicatat.
AngerClown
Mengatur START_HOURS_RANGE ke nilai tunggal (= 3) tidak akan berfungsi, karena rentang harapan ini, bukan angka tunggal. Jadi seharusnya 3-4 pada contoh di atas.
Slavik
6

Bukan jawabannya, tapi saya baru-baru ini mencoba mencari tahu untuk alasan lain dan tidak dapat menemukan dokumentasi tentang bagaimana Redhat 6, Centos, dll menjalankan cron. Inilah yang saya rekayasa terbalik:

  1. crond masih berjalan saat startup sistem - ini memuat semua file di /etc/cron.d
  2. /etc/cron.d/0hourly menjalankan semua file dalam /etc/cron.hourly
  3. /etc/cron.hourly/0anacron berjalan anacron
  4. banyak anacron /etc/anacrontab
  5. /etc/anacrontabmenjalankan (melalui run-parts) /etc/cron.daily, /etc/cron.weeklydan/etc/cron.monthly

Jadi, ini lebih rumit daripada versi sebelumnya.

Dimungkinkan untuk memulihkan perilaku lama dengan menambahkan entri per jam, mingguan, dan bulanan kembali ke /etc/crontab(yang sekarang kosong), tetapi anacrontabperlu diperbarui juga. Ini mungkin atau mungkin tidak merusak pembaruan di masa depan ...

AngerClown
sumber
4

Jawaban lain mencakup bagaimana tetapi tidak harus mengapa . The alasan adalah untuk menjaga simultan pekerjaan cron malam dari pembunuhan infrastruktur. (Bayangkan penyimpanan bersama, atau mungkin 1000 server berjalan pada satu host VM, atau hanya pekerjaan malam yang menghantam beberapa layanan jaringan.)

Saya selalu memecahkan masalah ini untuk rotasi log secara spesifik pada sistem saya dengan memindahkan pekerjaan rotasi log tertentu dari cron.dailyke entri dengan waktu yang sulit cron.d. Dengan begitu, Anda masih mendapatkan lompatan berjalan untuk layanan seperti updatedb di mana waktu sebenarnya tidak penting, tetapi waktu yang konsisten untuk rotasi log.

Tentu saja, ketika Anda mencapai ukuran tertentu, Anda tetap ingin semua log Anda dikirim dari host ke server log, dan kemudian waktu rotasi file pada masing-masing node kurang penting, karena hanya ada untuk kenyamanan (biasanya mengikuti ekor file) atau sebagai pilihan terakhir mundur. Kemudian, Anda pasti akan mengatur rotasi pada server log Anda menjadi sistematis.

mattdm
sumber