Putar file yang terbuka dan sedang ditulis setiap saat

10

Saya memiliki aplikasi linux yang terus menulis informasi logging ke file log, misalnya. /var/log/application.log. Karena aplikasi tidak memutar file secara otomatis, file log ini dapat mencapai ukuran gigabytes dalam beberapa minggu, jadi saya ingin dapat memutar file ini dengan benar

Perhatian utama saya di sini adalah untuk memutar file yang dibuka oleh aplikasi setiap saat, saya mungkin perlu:

  1. Pindahkan file ke bentuknya yang diputar /var/log/application.log -> /var/log/application.log.2013-01-28

  2. Buat yang kosong /var/log/application.log. Obs: Pada saat ini proses aplikasi masih menulis/var/log/application.log.2013-01-28

  3. Ubah deskriptor file dari proses aplikasi untuk kembali ke /var/log/application.log

Jadi, apakah saya benar? Jika demikian, bagaimana saya bisa melakukan ini? (terutama mengubah bagian deskriptor file)

Jika tidak, apa cara yang benar dan bagaimana melakukannya?

Bruno Polaco
sumber
Apakah Anda perlu menghapus file atau hanya memutarnya?
ewwhite
Aplikasi apa? Aplikasi harus memberikan dukungan untuk melakukan ini dengan benar. (Jika tidak, Anda dapat melakukan hal yang sangat buruk - lampirkan ke proses, buka file baru, dup2deskriptor baru di atas yang lama, lalu tutup deskriptor baru.)
David Schwartz
Pendekatan yang menarik Schwartz. Saya penasaran melihat itu dalam aksi dan akan bermain dengannya sebentar. Lagi pula, aplikasi ini di rumah dan saya sedang mencari solusi yang lebih umum. Saya suka jawaban kormoc btw
Bruno Polaco
@ewwhite saya perlu memutarnya, saya tidak mampu kehilangan data log
Bruno Polaco

Jawaban:

11

Tulis logrotatekonfigurasi untuk digunakancopytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.
RS
sumber
Menarik, memotong file setelah menyalin tampaknya cukup pintar, bahkan dengan margin kehilangan data. Saya tidak melihat opsi ini pada logrotate. Terima kasih atas wawasannya :)
Bruno Polaco
1

Sebagian besar aplikasi semacam itu merespons sinyal, seperti SIGHUP, dan akan menutup dan membuka kembali file lognya saat menerima sinyal. Periksa dokumentasi aplikasi Anda untuk sinyal yang benar untuk dikirim.

Michael Hampton
sumber
Dan jika tidak, Anda dapat me-restart aplikasi sebagai cadangan. Itulah yang biasanya dilakukan syslog, dan beberapa program lainnya.
lsd