Membersihkan file log di bawah linux

10

Saya menggunakan mesin virtual kvm ubuntu 10.04 untuk menguji beberapa fitur modul kernel. Saya melihat-lihat /var/logfile untuk mengamati pesan kernel tentang modul itu.

Untuk memulai dari kondisi bersih, saya menghapus file log yang berisi pesan lama dengan menjalankan rm -rf /var/log/*dan kemudian me-reboot mesin virtual. Namun, setelah saya reboot, file log baru masih berisi pesan log lama itu. Dibutuhkan sekitar 5-6 siklus menghapus file dan me-reboot mesin virtual untuk akhirnya menyingkirkan pesan file log tersebut.

Mengapa ini terjadi? Apakah ada cara yang lebih mudah untuk membersihkan file log?

renungkan zombie
sumber
logrotateadalah perangkat lunak resmi linux tentang menghapus & memutar log secara otomatis.
Hanan N.
Saya tidak ingin memutar. Cukup bersihkan mereka.
contemplatingzombie
1
Sepertinya ini berfungsi untuk saya: 1. rm -rf / var / log / * 2. dmesg -c 3. reboot Karena ini berfungsi, saya pikir kernel membaca pesan log sebelumnya saat boot, menyimpannya di buffer dan menulisnya ke file sekali lagi saat reboot. Jika ada yang tahu lebih banyak tentang mekanisme yang sebenarnya, silakan perbarui.
contemplatingzombie

Jawaban:

7

Cara termudah untuk membersihkan log lama adalah tidak menghapusnya.

Cara terbaik untuk membersihkan log adalah logrotateseperti yang ditunjukkan oleh Hanan N. atau:

find /var/log -type f -exec /bin/cp /dev/null {} \;

untuk masing-masing file log. Saya tidak yakin entri log mana yang Anda maksud dari boot sebelumnya tetapi jika Anda ingin menghapus ini setelah boot, Anda dapat memasukkan perintah di atas ke dalam /etc/rc.localskrip sehingga semua logging untuk setelah boot.

Biasanya meskipun Anda tidak ingin menghapus log karena mereka adalah titik awal Anda dalam semua pemecahan masalah.

Karlson
sumber
Saya berpikir bahwa perintah 'cp' akan menyalin semua log selama nama file diperluas terakhir ... mungkin Anda berarti: find /var/log/* -exec cp /dev/null {} \;?
jjmontes
@ jjmontes Terima kasih. Saya tidak dapat menemukan perintah find pada saat itu. :) Tapi itu sebenarnya akan diubah dengan cara saya edit
Karlson
3

Untuk apa yang Anda lakukan, mungkin lebih baik menambahkan file log tambahan untuk pesan kernel. Beberapa daemon log memungkinkan Anda melakukan kecocokan pada catatan yang sedang ditulis, sehingga Anda hanya mendapatkan catatan yang sesuai dalam file Anda. Anda kemudian dapat memutar, menghapus, atau mengganti nama file antara menjalankan. (Jika Anda tidak me-reboot, Anda mungkin perlu mengirim sinyal HUP ke daemon log untuk mendapatkannya membuka kembali file-nya.

Ada juga alat yang hanya akan mengekstrak catatan baru dari log. The logtailutilitas dari logcheckpaket adalah salah satu utilitas tersebut. Itu dapat dijalankan dengan file offset alternatif.

Ada alat lain yang mengawasi log untuk catatan yang cocok dengan suatu pola dan melaporkannya. Salah satunya mungkin bekerja dengan baik untuk Anda.

BillThor
sumber
1

Ini tampaknya berfungsi baik (pada Ubuntu LTS 14.04) dengan memutar log Anda ke log bersih dan kemudian menghapus entri log yang lebih lama. Ini mirip dengan metode cp / dev / null, tapi saya pikir ini lebih bersih. ymmv

logrotate --force /etc/logrotate.conf
find /var/log/ -name '*[0-5]*' -exec rm {} \;
flickerfly
sumber