Apache2 dan logrotate: delaycompress diperlukan?

8

Saat ini saya sedang melihat ukuran file log Apache saya karena mereka menjadi besar. Dalam konfigurasi logrotate saya, saya telah delaycompressmengaktifkan. Apakah Apache benar-benar membutuhkan ini (seperti dokumentasi logrotate mengatakan bahwa beberapa program masih menulis di file lama) atau apakah aman untuk dinonaktifkan delaycompress?

Ini adalah konfigurasi logrotate saya:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 26 
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            if [ -f /var/run/apache2.pid ]; then
                    /etc/init.d/apache2 restart > /dev/null
            fi
    endscript
}
j0nes
sumber

Jawaban:

7

Jika Anda melakukan restart Apache (atau bahkan 'anggun') itu akan menutup menangani file dan membukanya lagi. Anda seharusnya tidak perlu menunda kompresi karena file akan ditutup dan dibuka kembali sebagai bagian dari restart postrotate Anda.

rotate access_log -> access_log.1 (rename action, no INODE change)
apache still writing to access_log.1 (same open FD on same INODE)
apache restart (close FD, release INODE writing)
apache writing to access_log (new FD to a new INODE)

Restart adalah ide yang buruk - bagaimana jika file konfigurasi secara tidak sengaja berubah dan tidak lagi valid? Apache Anda tidak akan mulai kembali. Alih-alih mengirim HUP ke proses induk yang memerintahkannya untuk menutup / membuka kembali pegangan file.

postrotate
  /bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript

cat akan gagal jika PID hilang (atau kosong, atau tidak valid) menyebabkan kill juga gagal sehingga Anda tidak perlu if..thenblok di sekitarnya.

Martijn Heemels
sumber
YMMV tapi saya menemukan ini jawaban yang bagus
asdmin
0

Hrm, dalam hal ini, mungkin, karena Apache membuat log tetap terbuka.

Satu hal yang bisa Anda coba adalah rotatelogsskrip. Itu bagian dari apache2-utilspaket, setidaknya di sini di workstation Ubuntu saya. Pendekatan lain adalah dengan memutarnya setiap hari alih-alih setiap minggu, jadi Anda mengurangi buffering sebelum kompresi.

McJeff
sumber
Mungkin seharusnya menambahkan konfigurasi logrotate saya di pertanyaan di atas - sebagai postrotate saya telah mengatur restart apache2.
j0nes