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.


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.


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


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.


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.