Kapan menggunakan opsi delaycompress di logrotate?

33

Halaman manual logrotatemengatakan bahwa:

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.

Saya bingung dengan ini. Jika suatu program tidak dapat diberitahu untuk menutup logfile-nya, ia akan terus menulis selamanya , tidak untuk suatu saat . Jika kompresi ditunda ke siklus rotasi berikutnya, program terus menulis ke file itu bahkan setelah siklus rotasi berikutnya. Bagaimana menunda menyelesaikan masalah?

Pemahaman saya adalah bahwa copytruncateharus digunakan ketika suatu program tidak dapat diberitahu untuk menutup file log. Saya menyadari bahwa beberapa data yang ditulis ke logfile hilang ketika salinan sedang berlangsung.

Saya melihat file logrotate untuk couchdb, dan ia memiliki keduanya copytruncatedan delaycompressopsi.

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

Sepertinya tidak ada gunanya menggunakan delaycompressketika copytruncatesudah ada di sana. Apa yang saya lewatkan?

Anand Chitipothu
sumber

Jawaban:

27

Pemahaman Anda tentang copytruncateitu benar, tetapi kata-kata di halaman manual delaycompresssedikit menyesatkan. Lebih tepatnya, itu harus mengatakan "ketika beberapa program tidak dapat diberitahu untuk segera menutup itu logfile" - misalnya, jika Anda menggunakan skrip shareds dan skrip mengirim sinyal ke proses menggunakan log ketika semua file log telah diputar .

womble
sumber
1
Ketika saya menggunakan copytruncate, tidak perlu memberitahu program untuk menutup logfile-nya. Jadi tidak ada artinya untuk menentukan delaycompressbersama copytruncate?
Anand Chitipothu
6
Jangan pernah gunakan copytruncatekecuali Anda benar - benar harus, karena itu kehilangan entri log. Anda dapat menggunakan kedua opsi jika Anda menginginkan fitur lain yang delaycompressmenyediakan - kemampuan untuk membaca file log sebelumnya tanpa perlu mendekompres terlebih dahulu.
womble
Apakah ada opsi lain selain copytruncatejika saya tidak dapat memberi tahu program saya untuk memuat ulang?
Anand Chitipothu
5
Tidak. Itu sebabnya Anda harus menggunakan perangkat lunak yang tidak payah, dan yang akan menerima sinyal untuk mengatakan "muat ulang log Anda".
womble
3

Tidak yakin apakah saya benar-benar memahami pertanyaan Anda, tetapi jika Anda menanyakan apa yang saya pikirkan ... Saya menggunakan ini:

postrotate
          killall -HUP syslog-ng
  endscript

Itu cara yang bagus (atau setidaknya a) untuk membunuh log dan pindah ke yang berikutnya. Untuk "program" yang payah, seperti platform ASA Cisco yang mencatat banyak data per detik, ia berfungsi.

Warren
sumber
3

Kita gunakan:

  • harian
  • delaycompress
  • nodateext

Ini membuat salinan apache yang telah diperbaiki access_log access_log.1sehingga kami dapat menjalankan paket Statistik kami sebagai skrip di akhir hari.

Logrotate hari berikutnya memampatkan pembuatan file access_log.2.zip

Edwardg
sumber