Kami menggunakan pemula untuk mengelola layanan kami di server Ubuntu kami. Mereka menghasilkan log yang logout ke /var/log/upstart/SERVICE_NAME.log
Kemudian setiap hari, file log diputar menggunakan skrip logrotation yang dilengkapi dengan 12,04 LTS:
/var/log/upstart/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
}
Masalahnya adalah bahwa sementara logrotate memindahkan file, tampaknya tidak memberi sinyal untuk memulai baru untuk menutup dan membuka kembali file, membiarkan proses pemula menulis ke PID hapus.
init 1 root 8w REG 202,1 64 2431 /var/log/upstart/dbus.log.1 (deleted)
init 1 root 13w REG 202,1 95 2507 /var/log/upstart/acpid.log.1 (deleted)
init 1 root 14w REG 202,1 127 17377 /var/log/upstart/whoopsie.log.1 (deleted)
init 1 root 36w REG 202,1 122 6747 /var/log/upstart/SERVICE_NAME.log.1 (deleted)
init 1 root 37w REG 202,1 30 6762
Jelas saya bisa mengarahkan output dari layanan saya sendiri ke file log lainnya, tetapi masalahnya masih ada di sana untuk proses sistem. Juga saya lebih suka tidak perlu membangun lebih banyak infrastruktur daripada yang saya butuhkan.
nocreate
direktif, tidak yakin mengapa ada orang yang menggunakan direktif ini, terutama untuk layanan yang berpotensi bisa menulis banyak outputJawaban:
Saya yakin Anda memiliki 3 opsi.
Anda mengubah konfigurasi yang ada dengan menambahkan "copytruncate"
/var/log/upstart/*.log { copytruncate daily missingok rotate 7 compress notifempty nocreate }
Jika Anda tidak dapat atau (tidak diizinkan) untuk mengubah konfigurasi logrotate yang ada karena file log lain yang tidak menderita dan konfigurasi yang ada berfungsi untuk mereka, kemudian pindahkan file "SERVICE_NAME.log" Anda ke folder baru di bawah / var / log jika Anda inginkan, buat konfigurasi baru dengan "copytruncate" dan tambahkan ke cron.daily.
a) Jika Anda tidak diizinkan untuk mengubah konfigurasi os host logrotate atau menambah cron.daily OS host, maka opsi ketiga Anda adalah mengubah skrip atau program untuk memeriksa apakah file tersebut ada sebelum menulis ke file. b) Cara lain adalah sedikit poin 2 di atas yang memindahkan file log Anda ke tempat lain dan di dalam skrip atau program Anda, jalankan perintah logrotate khusus untuk file log program itu.
Butir 3b di atas lebih rumit tetapi lebih elegan dan itulah yang paling sering saya gunakan karena artinya program ini swasembada dan dikelola sendiri dan tidak memerlukan pekerjaan OS untuk mengasuhnya.
Untuk mengetahui cara menjalankan logrotate secara manual dan menambahkannya ke program atau skrip Anda cukup ketik:
atau
Jika Anda menggunakan Python untuk program Anda, Anda dapat memeriksa bagaimana program ini menggunakannya untuk mengelola sendiri file log-nya. http://bazaar.launchpad.net/~ferncasado/keep.awake/trunk/files/head:/v4/
sumber
Ternyata, ini adalah masalah yang diketahui dan tiket tetap terbuka saat saya mengetik ini.
Hal yang benar untuk dilakukan adalah, mungkin, hanya menghapus
/etc/logrotate.d/upstart
semuanya dan memutar file dari masing-masing layanan secara individual. Karena direktori (/var/log/upstart/
) hanya berisi stdout / stderr dari berbagai layanan - dan tidak ada layanan yang dimaksudkan untuk berjalan sebagai daemon yang seharusnya menghasilkan ke dua saluran itu sama sekali. Kecuali, mungkin, pada saat startup.Pada sistem saya mengelola, tiga layanan dijalankan oleh pemula:
php5.6-fpm
,php7.1-fpm
, danacpid
. Tidak satu pun dari tiga log yang aktif tetapi kadang-kadang fpm di-restart karena file-log utamanya (/var/log/php5.6-fpm.log
) sedang diputar - dan hal ini menyebabkan kebisingan ini, karena menghasilkan beberapa kegilaan saat startup.Jika Anda tetap bersikeras memutar file-file ini, Anda dapat mengandalkan fakta, bahwa nama mereka cocok dengan nama-nama layanan dan menggunakan
postrotate
skrip berikut :Agar hal di atas berfungsi, pastikan untuk tidak menggunakan
kata kerja di sana - skrip saya bergantung pada fakta, jalur sebenarnya ke file tersebut akan diteruskan sebagai argumen pertama (sharedscripts
$1
).(Pengalihan ke
/dev/null
berguna, karena-service
perintah berisik - dan Anda tidak ingin suara seperti itu dikirimkan kepada Anda melalui cron. Perhatikan, bahwa saya tidak mengarahkan ulang distderr
sana, hanyastdout
- jika ada masalah, Anda Masih akan menerima email tentang hal itu.)sumber