Logrotate: “log tidak perlu berputar” mengapa?

57

Saya memiliki konfigurasi logrotate baru berikut:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Ketika saya berlari logrotate -d nexus, saya mendapatkan yang berikut:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

/ Var / log / nexus / folder saya berisi yang berikut ini:

nexus.log
oldlogs.tar.gz

Mengapa LogRotate tidak memutar file nexus.log? Apa yang saya harapkan adalah file nexus.log akan terpotong dan file baru, seperti nexus.log-201106241000, akan dibuat.

Kaya
sumber
Juga, ingat, ketika Anda menggunakan opsi -d, ITU TIDAK MEMUTARKAN LOG. Ini menunjukkan kepada Anda apa yang DILAKUKAN melakukannya tanpa opsi, seperti rencana permainan. Menyebabkan saya sakit kepala serius ketika saya pikir saya bisa melihat mereka berputar, dan kemudian mereka masih ada di sana.
Maxwell Flanders

Jawaban:

64

Kemungkinan besar, file log berumur kurang dari satu hari dan / atau telah diputar pada hari terakhir dan logrotate mengingat sejarah.

Jika Anda menambahkannya -fakan memaksa rotasi jika Anda benar-benar ingin (walaupun tidak 100% yakin bagaimana itu berinteraksi dengan -d).

Anda dapat melihat riwayat, lokasi tergantung pada distribusi Anda, tetapi mungkin juga /var/lib/logrotate/status. File itu menunjukkan kapan log terakhir diputar.

EightBitTony
sumber
4
Di FreeBSD
/var/run/logrotate.status
Juga periksa kemungkinan penggunaan argumen -s dalam permohonan lokasi file status
JGurtz
2
-d+ -fmembuat laporan logrotate "perlu diputar" untuk semua file, bahkan yang tidak cocok
Fluffy
Untuk menambah ini, mengedit tanggal dalam file status menjadi lebih tua dari kebijakan rotasi sudah cukup untuk meyakinkan logrotateitu perlu memutar log ketika berjalan lagi.
Centimane
Pada CentOS, saya memodifikasi /var/lib/logrotate.status agar logrotate berfungsi. Seperti yang ditunjukkan oleh EightBitTony, logrotate harian akan mengingat sejarah. Kecuali file sudah dalam sejarah dengan tanggal di masa lalu, logrotate tidak akan merotasi file.
Tandai
58

Pertama kali Anda menjalankan logrotate dengan konfigurasi log baru, ia tidak tahu kapan rotasi log terakhir terjadi, jadi itu hanya menulis baris status /var/lib/logrotate/statuske efek yang dijalankan hari ini.

Ketika kemudian dijalankan pada hari berikutnya, ia melihat bahwa log tersebut berumur satu hari dan memutarnya seperti yang diharapkan. Jika Anda tidak ingin menunggu, edit file status logrotate dan buat tanggal status untuk log Anda kembali ke hari sebelumnya.

Ketika Anda menjalankan logrotate secara manual, itu akan berfungsi seperti yang diharapkan

Tony Sweeney
sumber
5

Kadang-kadang bahkan jika Anda menjalankan logrotate secara manual, ini tidak akan berfungsi jika Anda melakukannya pada hari yang sama dan memiliki di dateextmana nilai default tidak termasuk senconds (misalnya -%Y%m%d). Bahkan jika Anda memodifikasi file status logrotate atau ketika menggunakan ukuran direktif (misalnya size 200M). Setidaknya pada CentOS 6, logrotate akan gagal memutar file log Anda karena sudah ada.

Untuk mengatasi ini, Anda perlu menggunakan dateformatbukannya dateext, dengan nilai seperti: %Y%m%d%s.

Lihat man logrotateuntuk informasi lebih lanjut.

emerino
sumber
1

Waspadalah dengan menjalankan

logrotate -vdf /etc/logrotate.conf

acara meskipun hanya disimulasikan akan dicatat /var/lib/logrotate.status dan proses logrotate berikutnya akan menjawab dengan yang disebutkan

log does not need rotating
helvete
sumber
1
Saya tidak dapat mereproduksi itu di Ubuntu (16.04 dan 17.04). Jika "/var/lib/logrotate.status" digunakan, Anda harus menggunakan distro lain. Ubuntu log ke "/ var / lib / logrotate / status".
Philipp Claßen
2
@ Phillip Claßen: Anda benar ini (file status ditempatkan di /var/lib/logrotate.status) telah diamati saat debugging konfigurasi Logrotate 3.10 pada Alpine linux 3.5 dalam wadah buruh pelabuhan. Tetapi tidak ada bendera Ubuntu dalam definisi pertanyaan, bukan?
helvete
1
Ya, tidak apa-apa. Saya hanya akan menyebutkannya karena Ubuntu sangat populer. Saya berasumsi banyak orang membaca pertanyaan ini karena mereka ingin memperbaiki server mereka, yang hari ini sering berjalan dengan Ubuntu.
Philipp Claßen
1
Baik, benar. Untuk lebih lengkap saya dapat menambahkan bahwa locationo dari file status di Centos 7 distro ada di/var/lib/logrotate/logrotate.status
helvete