Solusi 1:
Anda dapat menggunakan:
> /var/log/mail.log
Itu akan memotong log tanpa Anda harus mengedit file. Ini juga cara yang andal untuk mendapatkan ruang kembali. Kadang-kadang orang membuat kesalahan dengan menggunakan rm pada log kemudian membuat ulang nama file, jika proses lain membuka file maka Anda tidak mendapatkan ruang kembali sampai proses itu menutup pegangannya dan Anda dapat mengacaukan izinnya.
Juga jika Anda melihat isi log Anda mungkin ingin menggunakan tail
perintah:
tail -f /var/log/mail.log
Ctrl-C akan memutuskan tailing.
Solusi 2:
Ya, ada cara yang tepat:Anda tidak membersihkan log sama sekali. Anda memutar mereka. Rotasi melibatkan pengalihan keluaran log ke file baru, dengan nama yang sama, dengan N file log sebelumnya disimpan di bawah N nama file terkait.
Cara seseorang merotasi log tergantung dari cara seseorang menulisnya. Ini adalah poin yang sering diabaikan. Beberapa jawaban di sini setidaknya menyentuhnya, menyebutkan bahwa beberapa program logging menyimpan deskriptor file terbuka untuk file log, jadi menghapus file saja tidak akan mengosongkan ruang, atau bahkan mengalihkan keluaran ke file log baru.
Jika program menulis file log adalah multilog
dari daemontools
paket, misalnya, maka Anda tidak melakukan apa pun untuk merotasi log sama sekali — tidak ada skrip manual, tidak ada cron
pekerjaan. Cukup beri tahu multilog
keluaran log itu adalah ke direktori, dan itu sendiri akan mempertahankan set file log N yang diputar dan dibatasi ukurannya secara otomatis di direktori itu.
Jika program menulis file log adalah svlogd
dari runit
paket, sebagai contoh lain, maka hal yang sama berlaku. Anda tidak melakukan apa pun selain mengarahkan alat ke direktori. Itu sendiri akan mempertahankan set file log N yang diputar dan dibatasi ukurannya secara otomatis di direktori itu.
Jika Anda menggunakan rsyslog
untuk menulis file log, maka program logging dapat disuruh berhenti setelah file log mencapai ukuran tertentu dan menjalankan skrip. Anda harus menulis isi skrip, untuk benar-benar mengganti nama file log dan menghapus file log lama berdasarkan batasan ukuran total, tetapi setidaknya program logging telah menutup file dan menghentikan sementara penulisan log saat ini terjadi.
syslogd
lama cara merotasi log, masih diharapkan oleh program logging seperti syslog-ng dan seperti yang dicontohkan oleh alat seperti logrotate
disebutkan oleh djangofan
di jawaban lain di sini, agak lebih serampangan. Seseorang menjalankan cron
pekerjaan yang secara berkala mengganti nama file log, dan memulai ulang daemon logging (menggunakan pengawas daemon apa pun yang menjalankannya). Masalah dengan ini, tentu saja, tidak menerapkan batas ukuran keseluruhan. Pada minggu-minggu yang lambat seseorang bisa mendapatkan N file log harian yang sangat kecil, sedangkan pada hari-hari sibuk seseorang bisa mendapatkan 1 file log yang sangat besar yang melebihi batas ukuran.
Inilah mengapa alat yang lebih baru dan lebih baik seperti multilog
dan svlogd
memiliki opsi konfigurasi ukuran file dan benar-benar memeriksa sendiri ukuran file log, tentu saja. Dunia telah belajar bahwa polling log pada jadwal dengan cron
pekerjaan, atau bahkan logrotate
daemon, meninggalkan jendela untuk ukuran yang salah, dan bahwa tempat yang tepat untuk melakukan pemeriksaan ini, dan dengan ketat menegakkan batas ukuran yang ditentukan administrator sehingga file log seseorang tidak pernah menelan partisi tempat mereka berada, ada di dalam program yang sebenarnya menulis file di tempat pertama.
Solusi 3:
Anda juga dapat menggunakan ini..
truncate /opt/package/logs/*.log --size 0
Di sini semua file log di /opt/package/logs akan menjadi kosong..
Solusi 4:
Ya, ada alat untuk linux bernama LogRotate .
Solusi 5:
Jika alasan Anda menghapus log adalah untuk mengosongkan ruang, Anda dapat cat /dev/null ke log tersebut, tanpa mengganggu penulisan program di dalamnya. Jangan pernah menghapusnya! beberapa perangkat lunak mungkin mengeluh dengan berhenti bekerja atau mengabaikan log sepenuhnya hingga restart berikutnya
cat /dev/null > /path/to/logfile
# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done