Adakah yang punya masalah dengan logrotate sebelum yang menyebabkan file log diputar dan kemudian kembali ke ukuran yang sama seperti aslinya? Inilah temuan saya:
Script Logrotate:
/var/log/mylogfile.log { putar 7 harian kompres olddir / log_archives missingok pemberitahuan copytruncate }
Output Verbose dari Logrotate:
menyalin /var/log/mylogfile.log ke /log_archives/mylogfile.log.1 truncating /var/log/mylogfile.log mengompresi log dengan: / bin / gzip menghapus log lama /log_archives/mylogfile.log.8.gz
Log file setelah terpotong terjadi
[root @ server ~] # ls -lh /var/log/mylogfile.log -rw-rw-r-- 1 part1 part1 0 Jan 11 17:32 /var/log/mylogfile.log
Beberapa detik kemudian:
[root @ server ~] # ls -lh /var/log/mylogfile.log -rw-rw-r-- 1 part1 part1 3.5G 11 Jan 17:32 /var/log/mylogfile.log
Versi RHEL:
[root @ server ~] # cat / etc / redhat-release Red Hat Enterprise Linux ES rilis 4 (Pembaruan Nahant 4)
Versi Logrotate:
[root @ DAA21529WWW370 ~] # rpm -qa | grep logrotate logrotate-3.7.1-10.RHEL4
Beberapa Catatan:
- Layanan tidak dapat dimulai kembali dengan cepat, jadi itu sebabnya saya menggunakan copytruncate
- Log diputar setiap malam, menurut
olddir
direktori memiliki file log di dalamnya dari setiap malam.
Saya sangat yakin bahwa Kjetil telah memukulnya. Drew, Anda mungkin belum yakin dengan penjelasannya, tetapi saya mendorong Anda untuk membaca dengan cermat apa yang dia katakan.
Jika Anda menerimanya, perbaikannya adalah untuk menghentikan dan memulai kembali aplikasi Anda ketika log diputar, atau menggunakan alat seperti "rotatelogs" apache, tempat Anda mengumpankan output log ke alat melalui pipa, dan alat tersebut menangani memutar logfile sesering mungkin. Sebagai contoh, salah satu contoh apache saya mencatat
yang menyebabkan banyak file log dengan nama suka
muncul tanpa memulai ulang apache; Saya kemudian dapat mengompresnya secara manual setelah fakta. Perhatikan bagaimana rotasi dilakukan setiap minggu, yaitu setiap 604800 detik, itulah argumen yang diteruskan
rotatelogs
.Jika Anda tidak bisa berhenti dan memulai ulang aplikasi, dan itu tidak bisa masuk melalui pipa, maka saya pikir Anda punya masalah nyata. Mungkin orang lain akan memiliki saran.
sumber
akan sangat bagus jika Anda bisa mengirim seluruh logrotate.
Mengapa mencoba menggunakan kill -HUP? (Reload klasik tidak me-restart ) metode.
Juga ... periksa dengan
lsof
siapa yang mengakses file.sumber
kill -HUP
karena aplikasi ini tidak dapat disentuh dengan cara apa pun - ini adalah aplikasi sensitif yang saya tidak miliki (saya bahkan tidak mengelolanya - saya hanya mengelola sisi OS) jadi saya harus dapat melakukan logrotations ini cara./etc/cron.daily
masuk dimulai. Pertanyaan untuk semua: Apakah ada sesuatu yang skrip logrotate lakukan secara berbeda dari menjalankan logrotate secara manual? Script logrotate saya benar-benar terlihat seperti/usr/sbin/logrotate /etc/logrotate.conf
. Ini cukup membingungkan.Cukup gunakan ">>" yang berarti menambahkan bukan ">" yang berarti buat dari skrip Anda yang menulis ke file ini. Saya memiliki masalah yang sama persis dan saya memperbaikinya menggunakan menambahkan dalam skrip saya.
SomeScript.sh >> output.txt
Harapan itu lebih jelas.
sumber
>
skrip. Apalagi jawaban ini membingungkan karena ada perbedaan besar antara>
dan>(
)
dalam skrip. Akhirnya jika kode yang melakukan penulisan diperbarui, akan jauh lebih baik untuk memilikinya hanya mulai menulis ke logfile baru setelahlogrotate
melakukan hal tersebut.