Bagaimana logrotate menangani “sehari-hari” secara tepat?
30
Dilihat oleh cap waktu pada sistem saya, logrotate melakukan rotasi log hariannya ketika logrotate dijalankan oleh cron. Namun, jika saya menjalankannya lebih awal dari itu tidak memutar file. Bagaimana logrotate tahu jika harus memutarnya atau tidak, apakah menyimpan riwayat atau mungkin menggunakan cap waktu?
Saya percaya ini adalah isi dari file state, yang merupakan kasus saya /var/lib/logrotate.status. Setiap file memiliki satu baris, yang merupakan tanggal terakhir diputar; jika Anda menjalankan logrotate pada tanggal tertentu sehingga file yang diberikan jatuh tempo, mengingat jumlah hari antara tanggal saat ini dan tanggal dalam file (1 untuk harian, 7 untuk mingguan, dll.), file akan diputar.
logrotate tampaknya tidak peduli pada jam berapa hari itu dijalankan; bahkan jika biasanya berjalan pada 2355, jika Anda menjalankannya pada 0130 sebagai gantinya, itu akan tetap memutar file yang ditandai setiap hari dan terakhir dilakukan kemarin; tetapi setelah melakukan itu akan menempatkan tanggal hari ini ke file negara (terhadap file yang diputar), jadi jalankan kedua pada 2355 tidak akan melakukan apa-apa.
Hmm .. Jadi itu hanya berputar jika: tanggal sekarang> tanggal dalam /var/lib/logrotate/status(seperti file dalam kasus saya).
Kyle Brandt
2
Saya pikir itu hanya melakukan apa-apa jika 24 jam telah berlalu sejak dijalankan terakhir, yang berhasil dengan memeriksa mtime file negara. Setelah diputuskan bahwa satu hari telah berlalu dan secara sah dapat melakukan apa saja, itu membuat keputusan SETIAP HARI, MINGGUAN dll berdasarkan pada bidang tanggal di dalam file.
MadHatter mendukung Monica
4
Yah sepertinya menggunakan tanggal dalam file itu. Saya mengatur hari suatu hari kembali dalam file status dan menjalankannya ... itu diputar ..
Kyle Brandt
Baru saja kembali dan menusuk logrotate saya, saya pikir saya salah dan apa yang Anda tulis di atas benar. Itu memutuskan apakah sudah dijalankan hari ini dengan melihat stempel waktu dari file negara; jika belum, ia akan mengekstrak tanggal rotasi terakhir dari file negara, dan bertindak sesuai. Saya baru saja berbohong untuk logrotate dengan vi dan sentuh -t untuk membujuknya bahwa itu terakhir dijalankan pada 2355 kemarin, ketika diputar log munin saya. Menjalankannya lagi, meskipun sudah kurang dari 24 jam, itu memutar mereka dan memperbarui file keadaan yang sesuai.
MadHatter mendukung Monica
Saya telah memperbarui jawaban saya untuk pemahaman saya saat ini, mengingat serangkaian tes yang baru saja saya jalankan (mengiris log munin saya delapan cara dari minggu, tapi siapa yang peduli!).
MadHatter mendukung Monica
11
Dari halaman manual logrotate:
Biasanya, logrotate dijalankan sebagai pekerjaan cron harian. Itu tidak akan memodifikasi log lebih dari sekali dalam satu hari kecuali kriteria untuk log itu didasarkan pada ukuran log dan logrotate dijalankan lebih dari sekali setiap hari, atau kecuali opsi -f atau -force digunakan.
/var/lib/logrotate/status
(seperti file dalam kasus saya).Dari halaman manual logrotate:
sumber