Dalam konfigurasi saya, saya memiliki rsyslog yang bertanggung jawab untuk mengikuti perubahan /home/user/my_app/shared/log/unicorn.stderr.log
penggunaan imfile
. Konten dikirim ke server logging jarak jauh lain menggunakan TCP.
Ketika file log diputar, rsyslog berhenti mengirim data ke server jauh.
Saya mencoba memuat ulang rsyslog, mengirim sinyal HUP dan memulai ulang semuanya, tetapi tidak ada yang berhasil.
Satu-satunya cara saya dapat menemukan bahwa itu benar-benar berfungsi adalah kotor:
- hentikan layanan, hapus file stat rsyslog dan mulai rsyslog lagi. Semua itu di kait postrotate di file logrotate saya.
kill -9
rsyslog dan mulai lagi dari awal.
Apakah ada cara yang tepat bagi saya untuk melakukan ini tanpa menyentuh rsyslog internal?
File rsyslog
$ ModLoad immark $ ModLoad imudp $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog $ ModLoad imfile $ template WithoutTimeFormat, "[environment] [% syslogtag%] -% msg%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $ InputFileTag unicorn-stderr $ InputFileStateFile stat-unicorn-stderr $ Info InputFileSeverity $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # Teruskan ke server jauh jika $ syslogtag mengandung 'apache-' maka @@ my_server: 5000; TanpaTimeFormat : syslogtag, mengandung, "apache-" ~ *. * @@ my_server: 5000; SyslFormat
File logrotate
/home/user/my_app/shared/log/*.log { harian missingok dateext putar 30 kompres pemberitahuan ekstensi gz copytruncate buat 640 pengguna pengguna skrip yang dibagikan pasca-putar (hentikan rsyslog && rm / var / spool / rsyslog / stat- * && mulai rsyslog 2> & 1) || benar naskah akhir }
FYI, file dapat dibaca untuk pengguna rsyslog, server saya dapat dijangkau dan file log lainnya yang tidak diputar pada siklus yang sama terus dilacak dengan benar.
Saya menjalankan Ubuntu 12.04.
post-rotate
(yang bukan merupakan hal) sebagai gantinyapostrotate
, karena skrip logrotate asli yang Anda seharusnya bekerja dengan baik dengan rsyslog (jika skrip postrotate telah berjalan ) ...?post-rotate
untuklastaction
. Komentar Anda masih sangat masuk akal dan mungkin telah memecahkan masalah saya saat itu :). Sebagai catatan, saya akan menghindari menggunakancopytruncate
di masa depan karena itu lambat dan bermain dengan file menangani.File logrotate Anda berisi entri untuk
/home/user/shared/log/*.log
, yang tidak cocok dengan file log Anda/home/user/my_app/shared/log/unicorn.stderr.log
. Anda perlu menambahkan entri logrotate untuk direktori itu dan memastikannya berisicopytruncate
- sebagaimana adanya, rsyslog mengganti nama file saat ini dan membuat yang baru, dan imfile terus mengikuti filehandle dari file yang sekarang diubah namanya.sumber