come implementare logrotate nello script di shell


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

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

Voglio implementare logrotate per controllare le dimensioni del file di registro, quindi come implementare logrotate, se la situazione è come sopra?

Risposte:


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

Ho rimosso il "&" in quanto potrebbe causare un problema.


@Veerendra dobbiamo mettere la logica del rotolamento dei log all'interno del loop mentre stai eseguendo un loop infinito ..
curioso

@Veerendra abbiamo avuto un errore nel mio post precedente. "Mv" non crea un nuovo file ma puoi modificare lo script in base alle tue esigenze.
curioso

Quindi, invece di cpe mv, posso rimuovere il file di registro, quindi sarà il nuovo file di registro con lo stesso nome? (Il mio requisito è, se il file di registro viene raggiunto un certo limite, voglio rimuovere quel file di registro e quindi creare un nuovo file )
Veerendra,

È necessario utilizzare >>per aggiungere al file di registro, >sovrascriverlo più e più volte.
alcik,

se uso >, visualizzo tail: test.log: file truncated Hello World!... Se utilizzo >>, visualizzo il messaggio di registro corretto, ma la dimensione del file aumenta. Nessuna condizione che controlla la condizione ...
;-(

24

che ne dici di usare savelog?

È disponibile in debian e RH e praticamente ogni altra distribuzione Linux che conosco. È uno script di shell / bin / sh, quindi dovrebbe essere eseguito anche su qualsiasi altro unix.

ad esempio prima di scrivere qualcosa da test.logeseguire savelog -n -c 7 test.log. Ciò manterrà le 7 versioni non vuote più recenti di test.log. Per impostazione predefinita, comprime i registri ruotati (ma che possono essere disabilitati con -l).

Se è necessario, è possibile controllare la dimensione test.loge solo savelogse supera una determinata dimensione.


Qualche idea su quale pacchetto contenga questo su AWS Linux (credo vicino a CentOS)? L'installazione predefinita non ha un registro. Non riesco a trovarlo da yum nemmeno usando i
repository

Savelog non trovato in RHEL 5. Sai in quale repo dovrebbe essere?
Felipe Alvarez,

nessuna idea sul packaging di centos o rhel5, ma è possibile trovare lo /usr/bin/savelogscript della shell su sources.debian.net/src/debianutils/4.7
cas

2
Non ho trovato savelogsu nessuna delle mie scatole RHEL / CentOS 5/6, quindi l'ho appena scaricato ad hoc e sembra funzionare perfettamente per le mie esigenze.
Dale Anderson,

Uno svantaggio di savelogè che rinomina il file ma richiede molto tempo per decomprimere quelli vecchi prima di terminare. Nel frattempo il registro .0 riceve già le voci dei prossimi giorni. Idealmente, il tempo tra la rotazione del registro e la segnalazione al processo di riapertura del registro dovrebbe essere minimo. A savelogcausa di ciò disabilito la funzione di compressione.
Rustyx,

2

Ho scritto un logrotee questo fine settimana. Probabilmente non lo farei se avessi letto l' ottima risposta dimultilog @ JdeBP .

Mi sono concentrato sul fatto che fosse leggero e in grado di bzip2 i suoi blocchi di output come:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

Tuttavia, c'è ancora molto da fare e testare.


0

Dato che non posso ancora aggiungere commenti alla risposta accettata , un suggerimento BusyBox , in cui dunon è presente un -bflag:

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.