Apakah ada cara untuk menjaga ukuran file file log tetap tanpa memutarnya dengan file kosong baru dan menghapus (atau pengarsipan) file lama. Sebagai contoh, jika saya menetapkan ukuran maksimum file log ke 1MB, setelah ukuran file meningkat melebihi batas itu akan secara otomatis dijepit, teks ditambahkan pada 'tail' dan bagian tertua dari teks dihapus untuk menjaga ukuran file 1MB .
13
rm -f *.tar.gz.*
Jawaban:
Anda dapat menulis skrip bash kecil untuk melakukan ini. Hanya tail file ke jumlah byte tertentu menggunakan
tail -c
dan menimpa file.dari
man tail
:sumber
Satu-satunya solusi Anda mungkin menulis sistem file userspace Anda sendiri atau berkontribusi ke yang sudah ada. Lihatlah daftar parsial di Filesystem di Userspace
Jika Anda tidak memiliki keterampilan untuk berkontribusi, tawarkan publisitas proyek atau $$$ atau keduanya, untuk menambahkannya untuk Anda.
Seandainya saya punya waktu untuk melakukannya, saya selalu menginginkan sesuatu yang persis seperti ini.
sumber
Anda dapat melakukan hal serupa menggunakan FIFO, yang seperti file berukuran nol byte.
Namun, perhatikan bahwa jika tidak ada yang MEMBACA dari file ini, maka proses syslog dapat diblokir, dan akan berhenti menulis ke SEMUA dari file log Anda. Saya tidak yakin apakah perilaku ini telah diubah dengan versi Ubuntu / CentOS yang lebih baru.
Satu contoh di sini
Sebagai contoh lain, coba sesuatu seperti ini.
Buat FIFO Anda:
Dan tambahkan ini ke (r) syslog.conf, lalu mulai ulang syslog:
Kemudian lihat FIFO dari satu jendela:
Dan di jendela lain, kirim beberapa barang ke syslog:
Anda akan melihat baris "Test *" pada output di
cat
atas.Fitur ini bisa bagus untuk debugging, terutama jika Anda tidak ingin menyimpan data lebih lama. Misalnya, jika Anda hanya ingin melihat semuanya kecuali untuk spam firewall, Anda dapat melakukan sesuatu seperti ini:
sumber
Inilah jawaban kedua saya. Ini adalah peretasan yang cukup.
Gunakan arloji (1) untuk berulang kali mengeksekusi
tail --bytes=1024
(1024 byte terakhir dari file log, terima kasih kepada @jjclarkson untuk jawaban itu).Dan kemudian lihat file dengan:
Perbedaan antara
watch
dan loop sementara adalah yangwatch
hanya akan memperbarui /tmp/messages.watch jika ada perubahan pada / var / log / messages.Dan yah, saya kira Anda bisa meletakkan
test
dalam loop sementara sehingga ekor hanya dieksekusi jika / var / log / pesan diperbarui, tapi saya tidak akan mengetahuinya sekarang.sumber
https://groups.google.com/group/mod.sources/browse_thread/thread/b2136b3ab7e924e/f785b37c218bb576?hl=id&ie=UTF-8&q=prune+log+file&pli=1
Banyak (kebanyakan? Semua?) Daemon akan membuka kembali file log mereka jika mengirim sinyal HUP (mis. Dengan pekerjaan cron yang sama yang menjalankan pemangkasan)
sumber
Saya yakin poster asli telah menemukan solusi setelah 8 tahun. Berikut ini satu lagi untuk orang lain yang mungkin membaca utas ini ...
curtail membatasi ukuran output program dan mempertahankan 200MB output terakhir dengan perintah berikut:
run_program | curtail -s 200M myprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
sumber