La gestione efficace dei file di registro è un'attività essenziale per l'amministratore di sistema Linux.
In questo articolo, discutiamo come eseguire le seguenti operazioni sui file di registro utilizzando logrotate UNIX utilità.
- Ruota il file di registro quando la dimensione del file raggiunge una dimensione specifica
- Continua a scrivere le informazioni di registro nel file appena creato dopo aver ruotato il vecchio file di registro
- Comprime i file di registro ruotati
- Specifica l'opzione di compressione per i file di registro ruotati
- Ruota i vecchi file di registro con la data nel nome del file
- Esegui script di shell personalizzati subito dopo la rotazione del registro
- Rimuovi i file di registro ruotati meno recenti
1. Registra file di configurazione
Di seguito sono riportati i file chiave di cui dovresti essere a conoscenza affinché logrotate funzioni correttamente.
/usr/sbin/logrotate – Il comando logrotate stesso.
/etc/cron.daily/logrotat e – Questo script di shell esegue il comando logrotate ogni giorno.
$ cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
/etc/logrotate.conf – La configurazione della rotazione del registro per tutti i file di registro è specificata in questo file.
$ cat /etc/logrotate.conf weekly rotate 4 create include /etc/logrotate.d /var/log/wtmp { monthly minsize 1M create 0664 root utmp rotate 1 }
/etc/logrotate.d – Quando i singoli pacchetti vengono installati sul sistema, eliminano le informazioni di configurazione della rotazione del registro in questa directory. Ad esempio, le informazioni sulla configurazione della rotazione del registro yum sono mostrate di seguito.
$ cat /etc/logrotate.d/yum /var/log/yum.log { missingok notifempty size 30k yearly create 0600 root root }
2. Opzione Logrotate size:ruota il file di registro quando la dimensione del file raggiunge un limite specifico
Se desideri ruotare un file di registro (ad esempio, /tmp/output.log) per ogni 1 KB, crea logrotate.conf come mostrato di seguito.
$ cat logrotate.conf /tmp/output.log { size 1k create 700 bala bala rotate 4 }
Questa configurazione logrotate ha le seguenti tre opzioni:
- size 1k – logrotate viene eseguito solo se la dimensione del file è uguale (o maggiore di) questa dimensione.
- crea:ruota il file originale e crea il nuovo file con l'autorizzazione, l'utente e il gruppo specificati.
- ruota:limita il numero di rotazione del file di registro. Quindi, questo manterrebbe solo i 4 file di registro ruotati recenti.
Prima della logrotation, la dimensione di output.log è la seguente:
$ ls -l /tmp/output.log -rw-r--r-- 1 bala bala 25868 2010-06-09 21:19 /tmp/output.log
Ora, esegui il comando logrotate come mostrato di seguito. L'opzione -s specifica il nome del file per scrivere lo stato logrotate.
$ logrotate -s /var/log/logstatus logrotate.conf
Nota:ogni volta che hai bisogno della rotazione del log per alcuni file, prepara la configurazione logrotate ed esegui manualmente il comando logroate.
Dopo la logrotation, la dimensione di output.log è la seguente:
$ ls -l /tmp/output* -rw-r--r-- 1 bala bala 25868 2010-06-09 21:20 output.log.1 -rwx------ 1 bala bala 0 2010-06-09 21:20 output.log
Alla fine questo continuerà a seguire la configurazione dei file di registro ruotati.
- output.log.4.
- output.log.3
- output.log.2
- output.log.1
- output.log
Ricorda che dopo la rotazione del registro, il file di registro corrispondente al servizio punterebbe ancora al file ruotato (output.log.1) e continua a scriverci. Puoi usare il metodo sopra, se vuoi ruotare apache log_accesso o log_errore ogni 5 MB.
Idealmente, dovresti modificare /etc/logrotate.conf per specificare le informazioni logrotate per un file di registro specifico.
Inoltre, se disponi di enormi file di registro, puoi utilizzare:10 fantastici esempi per visualizzare enormi file di registro in Unix
3. Opzione Logrotate copytruncate:continua a scrivere le informazioni di registro nel file appena creato dopo aver ruotato il vecchio file di registro.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 }
copytruncate istruisce logrotate a creare la copia del file originale (ovvero ruotare il file di registro originale) e tronca il file originale a una dimensione di zero byte. Questo aiuta il rispettivo servizio che appartiene a quel file di registro in grado di scrivere nel file corretto.
Durante la manipolazione dei file di registro, potresti trovare utile il sostituto sed, sed delete tips.
4. Opzione comprimi logrotate:comprime i file di registro ruotati
Se utilizzi l'opzione di compressione come mostrato di seguito, i file ruotati verranno compressi con l'utilità gzip.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create 700 bala bala rotate 4 compress }
Output del file di registro compresso:
$ ls /tmp/output* output.log.1.gz output.log
5. Opzione Logrotate dateext:ruota il vecchio file di registro con la data nel nome del file di registro
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create 700 bala bala dateext rotate 4 compress }
Dopo la configurazione di cui sopra, noterai la data nel file di registro ruotato come mostrato di seguito.
$ ls -lrt /tmp/output* -rw-r--r-- 1 bala bala 8980 2010-06-09 22:10 output.log-20100609.gz -rwxrwxrwx 1 bala bala 0 2010-06-09 22:11 output.log
Questo funzionerebbe solo una volta al giorno. Perché quando tenta di ruotare la prossima volta nello stesso giorno, il file ruotato in precedenza avrà lo stesso nome file. Quindi, logrotate non avrà successo dopo la prima esecuzione nello stesso giorno.
In genere è possibile utilizzare tail -f per visualizzare l'output del file di registro in tempo reale. Puoi anche combinare più output tail -f e visualizzarlo su un singolo terminale.
6. Opzione Logrotate mensile, giornaliera, settimanale:ruota il file di registro settimanale/giornaliero/mensile
Per aver eseguito la rotazione una volta al mese,
$ cat logrotate.conf /tmp/output.log { monthly copytruncate rotate 4 compress }
Aggiungi la parola chiave settimanale come mostrato di seguito per la rotazione settimanale del registro.
$ cat logrotate.conf /tmp/output.log { weekly copytruncate rotate 4 compress }
Aggiungi la parola chiave giornaliera come mostrato di seguito per ogni rotazione del registro giornaliera. Puoi anche ruotare i registri ogni ora.
$ cat logrotate.conf /tmp/output.log { daily copytruncate rotate 4 compress }
7. Opzione Logrotate postrotate endscript:esegui script di shell personalizzati subito dopo la rotazione del registro
Logrotate ti consente di eseguire i tuoi script di shell personalizzati dopo aver completato la rotazione del file di registro. La configurazione seguente indica che eseguirà myscript.sh dopo la logrotation.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress postrotate /home/bala/myscript.sh endscript }
8. Opzione Logrotate maxage:rimuovi i file di registro ruotati meno recenti
Logrotate rimuove automaticamente i file ruotati dopo un determinato numero di giorni. L'esempio seguente indica che i file di registro ruotati verranno rimossi dopo 100 giorni.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress maxage 100 }
9. Opzione Logrotate missingok:non restituisce un errore se il file di registro è mancante
Puoi ignorare il messaggio di errore quando il file effettivo non è disponibile utilizzando questa opzione come mostrato di seguito.
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate rotate 4 compress missingok }
10. Opzione Logrotate compresscmd e compressxt:Specificare il comando di compressione per la rotazione del file di registro
$ cat logrotate.conf /tmp/output.log { size 1k copytruncate create compress compresscmd /bin/bzip2 compressext .bz2 rotate 4 }
Le seguenti opzioni di compressione sono specificate sopra:
- compress – Indica che la compressione deve essere eseguita.
- compresscmd – Specifica il tipo di comando di compressione da utilizzare. Ad esempio:/bin/bzip2
- compressext:specifica l'estensione del file di registro ruotato. Senza questa opzione, il file ruotato avrebbe l'estensione predefinita come .gz. Quindi, se usi bzip2 compressioncmd, specifica l'estensione come .bz2 come mostrato nell'esempio sopra.