cara menerapkan logrotate di skrip shell


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

Saya ingin menerapkan logrotate untuk mengontrol ukuran file log, jadi bagaimana menerapkan logrotate, jika situasinya seperti di atas?

Jawaban:


11
#!/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.


@ Vikar kita perlu meletakkan logika menggulung log di dalam loop saat Anda menjalankan loop tak terbatas ..
penasaran

@Veerendra kami posting saya sebelumnya memiliki kesalahan .. "mv" tidak akan membuat file baru tetapi Anda dapat mengubah script sesuai dengan kebutuhan Anda.
penasaran

Jadi, alih-alih cpdan 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 )
Veerendra

Anda harus menggunakan >>untuk menambahkan file log, >akan menimpanya berulang kali.
alcik

jika saya gunakan >, 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 ... ;-(
Veerendra

24

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.logdijalankan 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.logdan hanya savelogjika ukurannya melebihi ukuran tertentu.


Adakah ide paket mana yang berisi ini di AWS Linux (dekat dengan CentOS, saya percaya)? Instalasi default tidak memiliki savelog. Saya tidak dapat menemukannya dari yum baik menggunakan repos default
jhonkola

savelog tidak ditemukan di RHEL 5. Apakah Anda tahu repo yang seharusnya berada di?
Felipe Alvarez

tidak tahu tentang kemasan centos atau rhel5, tetapi Anda dapat menemukan /usr/bin/savelogskrip shell di sources.debian.net/src/debianutils/4.7
cas

2
Saya belum menemukan savelogkotak RHEL / CentOS 5/6 saya, jadi saya baru saja mengunduhnya ad hoc, dan sepertinya berfungsi dengan baik untuk kebutuhan saya.
Dale Anderson

Salah satu kelemahannya savelogadalah 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 savelogfitur kompresi karena ini.
rustyx

2

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.


0

Karena saya belum bisa menambahkan komentar ke jawaban yang diterima , sebuah petunjuk BusyBox , di mana dutidak memiliki -bbendera:

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.