adakah yang bisa memberi saya solusi untuk memotong semua logfile di /var/log/
direktori?
dan pertanyaan hanya untuk pengetahuan, apakah itu ide yang bagus atau tidak?
#!/bin/bash
LOGDIR="/var/log"
for logfile in $(ls $LOGDIR/*log)
do
truncate -s 0 $logfile
done
command-line
scripts
files
log
piring
sumber
sumber
/var/log
situlah sistem menempatkan pesan yang mungkin Anda butuhkan nanti. Ubuntu telah mengalami masalah sebelumnya. Bacaman 8 logrotate;man logrotate.conf
.Jawaban:
coba ini:
truncate -s 0 /var/log/*log
EDIT:
jika Anda ingin melakukan ini lebih dari sekali, Anda harus menggunakan
logrotate
untuk menangani log Anda. Biasanya itu dipasang di ubuntu. Lihatman logrotate
(atau jika Anda belum menginstalnya lihat di manual online atau instal dengansudo apt-get install logrotate
)dari halaman manual:
sumber
Jika Anda ingin menghapus semua file log Anda, bukan hanya yang ada di folder log tingkat pertama, Anda bisa menggunakan:
Memperhatikan bahwa jika Anda sudah
logrotate
menjalankan, Anda harus menghapus yang diputar.gz
log yang :Penggunaan yang valid untuk ini bisa berupa membangun wadah alat VM untuk distribusi, misalnya.
Anda tidak perlu melakukan ini sebagai bagian dari pemeliharaan rutin: seperti yang disarankan DEM dengan benar, gunakan
logrotate
untuk itu.sumber
Sebagai tindak lanjut ke @DEN jawaban
Ini akan menemukan semua file log
/var/log
dan memotongnya menjadi 0 byte.sumber
*.log*
tetapi saya tidak yakin apakah itu 100% aman, jadi saya belum memasukkannya dalam jawaban. Karena ada file sepertidovecot.log-20180930
dandovecot.log-20180923.gz
.Ada beberapa metode untuk memotong file sepenuhnya, umumnya berlaku untuk sebagian besar OS yang kompatibel dengan POSIX. Paling umum yang akan Anda lihat dengan skrip shell adalah sesuatu seperti
true > file.txt
atau: > file.txt
(dan jikabash
shell,>
pengalihan saja sudah cukup). Itu karena cara>
membuka file melaluiopen()
atauopenat()
syscall denganO_WRONLY|O_CREAT|O_TRUNC
bendera - yang bertuliskan hanya-menulis ATAU buat jika nama file tidak ada, ATAU potong nama file yang ada.Dengan mengingat hal itu, kita dapat mengimplementasikan sesuatu seperti itu di C sendiri:
Beri nama file yang menyimpan kode ini sebagai
trunc.c
dan kompilasi dengangcc trunc.c -o trunc
, dan Anda memiliki utilitas kecil yang akan memotong argumen nama file yang disediakan seperti padatrunc ./foobar.txt
. Tentu saja, kode ini tidak melakukan pemeriksaan lain, hanya memotong parameter posisi pertama. Saya akan menyerahkan kepada pembaca untuk mencari tahu bagaimana menangani lebih dari satu parameter posisi. Di samping catatan, adatruncate()
syscall yang bisa kita gunakan juga, dan memotong file ke panjang variabel.Sekarang, jika Anda bukan penggemar C, Python mungkin lebih mudah bagi Anda.
open()
perintah beroperasi pada prinsip yang sama dengan Python - membuka file untuk menulis dan memotong jika nama file ada. Demikian yang bisa kita lakukanSedangkan untuk menemukan semua
.log
file, itu sudah tercakup dalam jawaban lain - gunakan*
glob atau extended glob dibash
. Ada jugafind -type f -name "*.log"
, yang memiliki-exec
flag untuk menjalankan perintah (dalam kasus khusus inish -c ''
untuk mengambil keuntungan>
karena>
merupakan operator shell dan bukan executable eksternal). Dengan begitu bisa Anda lakukanIni juga diperhatikan bahwa file log dalam direktori seperti
/var/log
sering diputar oleh layanan logrotate, sehingga akan ada nama file seperti/var/log/service.log
,/var/log/service.log.1
, dll, sehingga Anda mungkin ingin menggunakan*.log.[1-9]
pola sebagai gantinyaAntara lain, kita bisa menyalin
/dev/null
ke file yang diinginkan. Anehnya, walaupun itu/dev/null
adalah jenis file perangkat karakter khusus, ketika Anda menyalinnya di tempat lain hasilnya adalah file biasa yang kosong, setidaknya dengan GNUcp
. Demikian yang bisa kita lakukanatau
Bacaan lain yang disarankan:
sumber
Ini adalah praktik yang baik untuk memutar log di / var / log untuk memutar dengan fungsi logrotate tetapi tidak setiap kali kita ingin melakukannya. Log sistem akan dicetak padanya dan akan berguna untuk men-debug setiap kegagalan.
Jika itu adalah persyaratan untuk tidak menggunakan logrotate, maka opsi dapat dieksplorasi. Meskipun truncate adalah pilihan mudah dalam beberapa rasa sistem unix, perintah ini tidak tersedia, perlu diinstal. Jika tidak diizinkan untuk menginstal perintah baru maka loop di bawah ini dapat digunakan.
sumber
for logfile in /path/*.log
sebagai gantinya.