Bagaimana cara memutar log berdasarkan interval kecuali jika log melebihi ukuran tertentu?

20

Dari halaman manual logrotate:

ukuran minimum
File log diputar ketika mereka tumbuh lebih besar dari ukuran byte, tetapi tidak sebelum interval waktu tambahan yang ditentukan (harian, mingguan, bulanan, atau tahunan). Opsi ukuran terkait adalah serupa kecuali bahwa itu saling eksklusif dengan opsi interval waktu, dan itu menyebabkan file log diputar tanpa memperhatikan waktu rotasi terakhir. Ketika ukuran kecil digunakan, ukuran dan stempel waktu dari file log dipertimbangkan.

size size
File log diputar ketika mereka tumbuh lebih besar dari ukuran byte. Jika ukuran diikuti oleh k, ukuran diasumsikan dalam kilobyte. Jika M digunakan, ukurannya dalam megabyte, dan jika G digunakan, ukurannya dalam gigabyte. Jadi ukuran 100, ukuran 100k, ukuran 100M dan ukuran 100Gare semuanya valid.

Saya menetapkan ukuran sebagai 5M dan interval sebagai pemikiran mingguan bahwa log akan diputar setiap minggu dan rotasi tambahan akan terjadi jika ukuran log melebihi 5M. Tetapi yang terjadi adalah bahwa log tidak dapat diputar kecuali melebihi 5M, yang tampaknya merupakan ukuran yang seharusnya dilakukan.

Apakah saya salah menafsirkan manual? Bagaimana cara membuat log diputar setiap minggu DAN jika melebihi 5 juta?

EDIT:

Saya tidak yakin apakah informasi berikut ini relevan, tetapi hanya untuk melengkapi:

Saya menggunakan rsyslog untuk melakukan pendataan utama untuk pesan, secure, cron, maillog, boot. Berikut ini adalah tanggal rotasi dan ukuran file dari log kedua dari belakang di mana ukuran dan interval ditetapkan seperti dijelaskan di atas:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

Seperti dapat dilihat, hanya pesan yang dirotasi.

EDIT2:

Saya harus memeriksanya man logrotate. Mereka benar-benar memutakhirkannya dengan opsi maksimal . Ini seharusnya yang saya cari:

ukuran maksimum
file Log diputar ketika mereka tumbuh lebih besar dari ukuran byte bahkan sebelum interval waktu yang ditentukan tambahan (harian, mingguan, bulanan, atau tahunan). Opsi ukuran terkait adalah serupa kecuali bahwa itu saling eksklusif dengan opsi interval waktu, dan itu menyebabkan file log diputar tanpa memperhatikan waktu rotasi terakhir. Ketika maxsize digunakan, ukuran dan stempel waktu dari file log dipertimbangkan.

Pertanyaan Melimpah
sumber

Jawaban:

24

Beberapa pertanyaan dijawab di sini: logrotate setiap hari dan ukuran?

Biasanya logrotatehanya akan dijalankan sekali sehari, sehingga batas ukuran tidak akan dihormati dengan tepat. logrotateFile status (mungkin /var/lib/logrotate.status) hanya menyimpan tanggal (bukan kali), ini tidak dimaksudkan untuk digunakan lebih sering, sehingga Anda tidak dapat memutar file secara sepele lebih sering ( Pembaruan : versi 3.85 menambahkan dukungan per jam , dan menyimpan stempel waktu lengkap dalam file status) .)

Anda tidak mengatakan yang syslogdAnda gunakan, rsyslog dan syslog-ng mendukung rotasi berbasis ukuran yang dikelola sendiri, jadi Anda harus bisa membuat mereka memutar berdasarkan ukuran, dan bisa logrotatememutar setiap minggu (meskipun beberapa pemikiran mungkin diperlukan untuk penamaan file untuk memastikan rotasi file simultan tidak sengaja menghapus sesuatu).

Salah satu opsi lain adalah menggunakan log pipa, seperti halnya Apache, pada kenyataannya Apache-2.4 rotatelogs mendukung persis fitur ini (versi sebelumnya hanya mendukung ukuran atau waktu secara mandiri). Anda tidak mengatakan dari mana log itu berasal, tetapi Anda mungkin bisa masuk ke pipa atau fifo, dan menggunakan rotatelogs, jika itu didukung.

Dengan logrotate<= v3.8.0 tiga skenario yang didukung adalah:

  1. ukuran memutar berdasarkan ukuran, paling banyak sekali sehari, terlepas dari jangka waktu yang telah berlalu
  2. timeperiod memutar tanpa syarat oleh timeperiod, berapapun ukurannya
  3. minsize & timeperiod jika ukuran file log melebihi ukuran kecil, lalu putar menurut timeperiod. Penggunaan umum adalah "minsize 1" yang berarti log 0-byte tidak dirotasi, meminimalkan kekacauan.

logrotate-3.8.1 menambahkan:

  1. maxsize & timeperiod berputar ketika salah satu ukuran melebihi maxsize, atau setelah timeperiod berlalu. logrotatemungkin perlu dijalankan lebih dari standar sekali sehari dalam kasus ini.

logrotate-3.8.5 menambahkan:

  1. mendukung setiap jam , dan menyimpan stempel waktu lengkap dalam file status. Anda harus menjalankan logrotate(setidaknya) setiap jam untuk ini.
mr.spuratic
sumber
Silakan lihat pembaruan saya, terima kasih untuk tautannya. Sepertinya diperlukan beberapa skrip? ukuran kecil tampaknya tidak terlalu berguna, saya bertanya-tanya mengapa mereka memilikinya bukan ukuran maksimum.
Pertanyaan Overflow
1
Yay, opsi maksimum sekarang tersedia. Tutup huruf :)
Pertanyaan Melimpah
melihat bahwa dalam dokumen sebelum saya membaca pembaruan Anda ... jawaban sekarang diperluas. Terima kasih.
mr.spuratic
1
> file status logrotate (mungkin /var/lib/logrotate.status) hanya menyimpan tanggal (bukan waktu) Pernyataan ini mungkin kedaluwarsa. Saya baru saja memeriksa file status logrotate saya, dan memuat cap waktu dengan resolusi kedua: "/var/log/kern.log" 2018-3-12-1: 8: 16
hyperair