logrotate setiap hari dan ukuran?

40

Jika konfigurasi logrotate ditentukan dengan parameter "size" dan "daily", yang mana yang diutamakan? Di mana ini didokumentasikan? Saya ingin rotasi ini terjadi sebagai operasi boolean ATAU, yaitu, jika log berumur satu hari mereka diputar, ATAU jika mereka lebih besar dari ukuran tertentu mereka juga akan dirotasi. Namun, logrotate saat ini hanya menggunakan arahan "size", dan tampaknya mengabaikan arahan "harian". Logrotate diatur untuk dijalankan setiap jam. OS adalah linux, Red Hat, dan turunan Debian.

Juga, saya menetapkan "harian" pertama, lalu "ukuran" dari awal file. Tidak yakin apakah pesanan itu penting, tetapi dalam hal apa pun, seseorang harus datang terlebih dahulu dalam file konfigurasi ...

Terima kasih!

celana kucing
sumber
2
Lihat juga serverfault.com/questions/474941/…
belacqua
> definisi lokal menimpa definisi global, dan kemudian definisi> menimpa definisi sebelumnya dari halaman logrotate 3.8.7
John Bob Joe

Jawaban:

62

Jika arahan ukuran digunakan, logrotate akan mengabaikan arahan harian , mingguan , bulanan , dan tahunan . Ini tidak jelas dalam dokumentasi ketika Anda menjalankan man logrotateperintah. Namun hal itu dapat dikonfirmasi dalam praktik, dan disebutkan dalam beberapa posting blog yang sewenang-wenang seperti ini .

Ada arahan yang disebut minsize yang menurut halaman manual logrotate adalah satu-satunya arahan ukuran yang dapat digunakan bersama dengan yang waktu. Namun, ini masih bukan yang Anda inginkan. Menggunakan ukuran kecil dengan harian pada dasarnya mengatakan: rotasikan log setiap hari, tetapi hanya ketika mereka setidaknya berukuran #MB .

Sampai saat ini saya tidak menemukan cara dengan logrotate untuk melakukan kondisi yang Anda butuhkan: rotate setiap hari, kecuali ukurannya melebihi #MB, dalam hal ini segera berputar . Saya tidak berpikir ini didukung hanya dengan arahan logrotate. Mungkin dapat dilakukan dengan beberapa skrip cerdas melalui arahan kait skrip seperti prerotate , postrotate , firstaction , dan lastaction .

Perbarui :

Pada logrotate 3.8.1, maxsizedan timeperioddidukung bersama, yang akan menjadi solusi ideal. Lihat jawaban untuk posting ini: Bagaimana cara memutar log berdasarkan interval kecuali jika log melebihi ukuran tertentu?

gregtczap
sumber
4
Opsi terbaik mungkin adalah dengan menggunakan dua perintah cron yang terpisah, jalankan untuk menjalankannya setiap hari dengan conf default, dan satu setiap x menit yang membutuhkan konfigurasi hanya dengan file yang Anda khawatirkan overflow menggunakan ukuran direktif dan bukan harian.
SilverbackNet
8
Pada logrotate 3.81, maxsizedan timeperioddidukung. Per serverfault.com/questions/474941/...
belacqua
1
@ belacqua Saya menggunakan 3.8.7 dan timeperiod tidak ada dalam diri manusia.
JorgeeFG
Versi yang benar sebenarnya 3.8.1, bukan 3.81.
Tom Miller
2

Jawaban pertama oleh @egg, menurut pengalaman saya dengan logrotate, tidak benar!

Jika harian, bulanan, ... datang dulu dan setelah itu arahan ukuran , harian, bulanan, ... akan diabaikan dan arahan ukuran akan berlaku untuk file log.

Demikian pula ketika saya pertama kali menggunakan arahan ukuran kemudian arahan harian, mingguan, bulanan, dan tahunan , arahan ukuran akan diabaikan.

NONA
sumber
1

Jika Anda menambahkan Harian itu akan berputar setiap hari bahkan jika kondisi Ukuran terpenuhi. Jika Anda menambahkan kondisi ukuran juga Anda mungkin mendapatkan dua rotasi dalam satu hari tergantung pada bagaimana verbose logging itu.

Jika Harian masuk pertama dalam skrip maka Ukuran mungkin tidak menyala.

Paul Hickox
sumber
gunakan opsi verbose untuk melihat aturan mana yang digunakan. Dari pengujian saya, saya percaya hanya aturan terakhir yang digunakan karena aturan yang lebih spesifik dapat menggantikan aturan yang lebih umum.
Bram
Lebih banyak rotasi OK, karena itu akan menjadi perilaku yang diharapkan. (Boolean OR) Namun, masalah saya adalah bahwa rotasi ini tidak terjadi. Tampaknya menjadi bug (mungkin fitur) dari rotate log, karena saya tidak dapat melihat urutan arahan menjadi penting atau didokumentasikan di mana saja.
celana kucing
dapatkah Anda memberikan contoh logrotate.conf Anda dan file yang ingin Anda targetkan? Setiap hari tidak memiliki kondisi selain perkembangan waktu. Ukuran bersyarat.
Paul Hickox
/tmp/output.log {ukuran harian 1k rotate 5}
celana kucing
1
File ini akan diputar ketika ukurannya lebih besar dari 1k, tetapi tidak diputar setiap hari seperti yang diharapkan dan diinginkan.
celana kucing
1

Sebenarnya, halaman manual saya di Red Hat tampaknya cukup jelas tentang perbedaan antara ukuran dan ukuran:

ukuran kecil

          Log  files  are rotated when they grow bigger then size bytes,
          but  not  before  the  additionally  specified  time  interval
          (daily,  weekly, monthly, or yearly).  The related size option
          is similar except that it is mutually exclusive with the  time
          interval  options, and it causes log files to be rotated with-
          out regard for the last rotation time.  When minsize is  used,
          both the size and timestamp of a log file are considered.
Geoffrey M.
sumber