Saya memiliki skrip sederhana yang menampilkan sekelompok log ke layar dan saya mengirim STDOUT ke file untuk menyimpan log. Karena skrip ini berjalan lama, saya perlu memutar file log sehingga mereka dibuang ke yang lebih kecil dan lebih mudah dikelola.
Masalah yang saya hadapi adalah bahwa setelah logrotate
memindahkan file log saat ini ke yang baru, file log yang baru dibuat tidak diisi dengan log lagi. Tampaknya begitu file log asli dihapus, penangan filenya hilang dan pengalihan tidak akan berfungsi lagi.
Saya juga menemukan posting ini yang memiliki masalah yang sama dengan saya dan mengklaim bahwa itu dapat diperbaiki dengan menggunakan >>
alih-alih >
untuk mengarahkan kembali output. Saya menguji solusinya tetapi tidak berhasil untuk saya. Adakah yang tahu cara mempertahankan pengalihan?
Jawaban:
Anda harus menggunakan arahan copytruncate dalam konfigurasi logrotate Anda untuk file log ini.
sumber
compress
operasi, data digandakan. Itu menyebabkan kami masalah sekali tapi itu adalah masalah kami karena kami seharusnya tidak sedekat itu denganlv
batas ruang. Juga, seperti yang dinyatakan dalamman
cuplikan, Anda mungkin kehilangan beberapa data log di antara operasi salin dan terpotong.Sebagai alternatif, Anda juga dapat:
gunakan utilitas logger dalam skrip Anda alih-alih perpipaan, dengan fasilitas khusus (mis. local5), misalnya:
logger -p local5.info -t myscriptname "this is some log data"
konfigurasikan syslog untuk menulis fasilitas ini ke file log yang diinginkan, contoh (rsyslog.conf):
local5.* /var/log/mylogfile
atur aturan logrotate untuk log ini.
sumber
echo
. Keluaran alat pihak ketiga yang dipanggil dari skrip dan juga keluaran sesuatu tidak dapat dialihkan ke logger dengan cara iniAlternatif lain untuk solusi Iain adalah menggunakan
postrotate
skrip untuk meluncurkan kembali skrip Anda begitu rotasi telah terjadi. Ini dilakukan untuk banyak daemon (restart atau reload daemon), tetapi tidak mengetahui skrip Anda, saya tidak tahu apakah solusi ini cocok untuk Anda atau tidak (apakah skrip Anda bergantung pada beberapa keadaan yang dibuat beberapa saat yang lalu?).Isi dari
/etc/logrotate.d/your-script-name
:sumber
Anda dapat mem-pipe stdout ke "split" (bagian dari coreutils di linux). Ini memungkinkan Anda untuk membagi file / stdin menjadi potongan-potongan berdasarkan ukuran, jumlah baris, dll. Setelah Anda memotong Anda dapat mengelolanya dengan logrotate jika diperlukan.
sumber