Jawaban:
#!/bin/bash
touch /script_logs/test.log
MaxFileSize=2048
while true
do
sh test.sh >> /script_logs/test.log
#Get size in bytes**
file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
if [ $file_size -gt $MaxFileSize ];then
timestamp=`date +%s`
mv /script_logs/test.log /script_logs/test.log.$timestamp
touch /script_logs/test.log
fi
done
Saya telah menghapus "&" karena dapat menyebabkan masalah.
cp
dan mv
, dapatkah saya menghapus file log, lalu apakah itu file log baru dengan nama yang sama? (Persyaratan saya adalah, jika file log mencapai batas tertentu, saya ingin menghapus file log itu dan kemudian membuat file baru )
>>
untuk menambahkan file log, >
akan menimpanya berulang kali.
>
, saya mendapatkan tail: test.log: file truncated Hello World!
.... Jika saya menggunakan >>
, saya mendapatkan pesan log yang benar, tetapi ukuran file meningkat. Tidak ada syarat memeriksa kondisi ... ;-(
bagaimana kalau menggunakan savelog
?
Ini tersedia di debian dan RH dan hampir semua distro linux lain yang saya tahu. Ini adalah skrip shell / bin / sh, jadi harus dijalankan pada unix lain juga.
misalnya sebelum menulis apa pun untuk test.log
dijalankan savelog -n -c 7 test.log
. Ini akan membuat 7 versi test.log tidak kosong terbaru. Secara default, ini akan memampatkan log yang diputar (tapi itu bisa dinonaktifkan dengan -l
).
Jika perlu, Anda dapat memeriksa ukuran test.log
dan hanya savelog
jika ukurannya melebihi ukuran tertentu.
/usr/bin/savelog
skrip shell di sources.debian.net/src/debianutils/4.7
savelog
kotak RHEL / CentOS 5/6 saya, jadi saya baru saja mengunduhnya ad hoc, dan sepertinya berfungsi dengan baik untuk kebutuhan saya.
savelog
adalah ia mengganti nama file tetapi kemudian membutuhkan waktu lama untuk meng-gzip yang lama sebelum selesai. Sementara itu .0 log sudah mendapatkan entri hari berikutnya di dalamnya. Idealnya waktu antara rotasi log dan pensinyalan proses untuk membuka kembali log harus minimal. Saya menonaktifkan savelog
fitur kompresi karena ini.
Saya menulis logrotee akhir pekan ini. Saya mungkin tidak akan jika saya sudah membaca jawaban yang bagus tentangmultilog
@ JdeBP .
Saya fokus pada itu menjadi ringan dan mampu bzip2 potongan outputnya seperti:
verbosecommand | logrotee \
--compress "bzip2 {}" --compress-suffix .bz2 \
/var/log/verbosecommand.log
Masih banyak yang harus dilakukan dan diuji.
Karena saya belum bisa menambahkan komentar ke jawaban yang diterima , sebuah petunjuk BusyBox , di mana du
tidak memiliki -b
bendera:
du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1