Come accennato da Zeeshan, le opzioni logrotate size
, minsize
, maxsize
sono trigger per la rotazione.
Per spiegarlo meglio. Puoi eseguire logrotate tutte le volte che vuoi, ma a meno che non venga raggiunta una soglia come il raggiungimento della dimensione del file o il tempo appropriato trascorso, i log non verranno ruotati.
Le opzioni relative alle dimensioni non garantiscono che anche i registri ruotati abbiano le dimensioni specificate. Per farli avvicinare alla dimensione specificata è necessario chiamare il programma logrotate abbastanza spesso. Questo è fondamentale.
Per i file di registro che si accumulano molto rapidamente (ad esempio centinaia di MB al giorno), a meno che tu non voglia che siano molto grandi, dovrai assicurarti che logrotate venga richiamato spesso! questo è fondamentale.
Pertanto, per evitare che il tuo disco si riempia di file di registro multi-gigabyte, devi assicurarti che logrotate venga chiamato abbastanza spesso, altrimenti la rotazione del registro non funzionerà come desideri.
su Ubuntu, puoi facilmente passare alla rotazione oraria spostando lo script /etc/cron.daily/logrotate in /etc/cron.hourly/logrotate
Oppure aggiungi
*/5 * * * * /etc/cron.daily/logrotate
Al tuo file /etc/crontab. Per eseguirlo ogni 5 minuti.
Il size
L'opzione ignora le opzioni di orario giornaliero, settimanale e mensile. Ma minsize e maxsize ne tengono conto.
La pagina man è un po' confusa lì. Ecco la mia spiegazione.
minsize
ruota solo quando il file ha raggiunto una dimensione appropriata ed è trascorso il periodo di tempo impostato. per esempio. minsize 50MB + dailySe il file raggiunge i 50MB prima dello scadere del tempo giornaliero, continuerà a crescere fino al giorno successivo.
maxsize
ruoterà quando il registro raggiunge una dimensione impostata o è trascorso il tempo appropriato. per esempio. maxsize 50 MB + giornaliero. Se il file è 50 MB e non siamo ancora al giorno successivo, il registro verrà ruotato. Se il file è di soli 20 MB e passiamo al giorno successivo, il file verrà ruotato.
size
ruoterà quando log> size. Indipendentemente dal fatto che sia specificato orario/giornaliero/settimanale/mensile. Quindi, se hai una dimensione di 100M, significa che quando il tuo file di registro è> 100M, il registro verrà ruotato se logrotate viene eseguito quando questa condizione è vera. Una volta ruotato, il registro principale sarà 0 e un'esecuzione successiva non farà nulla.
Quindi nel caso dell'operazione. In particolare, 50 MB max userei qualcosa di simile al seguente:
/var/log/logpath/*.log {
maxsize 50M
hourly
missingok
rotate 8
compress
notifempty
nocreate
}
Il che significa che creerebbe massimo 8 ore di log. E ce ne sarebbero 8 a non più di 50 MB ciascuno. Dal momento che sta dicendo che riceve più gigabyte ogni giorno e supponendo che si accumulino a una velocità abbastanza costante, e viene utilizzato maxsize, finirà con l'avvicinarsi al massimo raggiunto per ogni file. Quindi saranno probabilmente vicini a 50 MB ciascuno. Dato il volume che creano, dovrebbe assicurarsi che logrotate venga eseguito abbastanza spesso da raggiungere la dimensione target.
Dal momento che ho messo ogni ora lì, avremmo bisogno che logrotate venga eseguito almeno ogni ora. Ma dal momento che si accumulano per dire 2 gigabyte al giorno e noi vogliamo 50 MB ... assumendo una velocità costante di 83 MB all'ora. Quindi puoi immaginare se eseguiamo logrotate ogni ora, nonostante l'impostazione di maxsize su 50, in quel caso finiremo con 83 MB di registro. Quindi, in questo caso, impostare la corsa ogni 30 minuti o meno dovrebbe essere sufficiente.
Assicurati che logrotate venga eseguito ogni 30 minuti.
*/30 * * * * /etc/cron.daily/logrotate
Specifica la dimensione del file di registro per attivare la rotazione. Ad esempio size 50M
attiverà una rotazione del registro una volta che il file avrà una dimensione pari o superiore a 50 MB. Puoi usare il suffisso M
per megabyte, k
per kilobyte e G
per gigabyte. Se non viene utilizzato alcun suffisso, lo prenderà per significare byte. Puoi controllare l'esempio alla fine. Sono disponibili tre direttive size
, maxsize
e minsize
. Secondo manpage:
minsize size
Log files are rotated when they grow bigger than size bytes,
but not before the additionally specified time interval (daily,
weekly, monthly, or yearly). The related size option is simi-
lar except that it is mutually exclusive with the time interval
options, and it causes log files to be rotated without regard
for the last rotation time. When minsize is used, both the
size and timestamp of a log file are considered.
size size
Log files are rotated only if they grow bigger then size bytes.
If size is followed by k, the size is assumed to be in kilo-
bytes. If the M is used, the size is in megabytes, and if G is
used, the size is in gigabytes. So size 100, size 100k, size
100M and size 100G are all valid.
maxsize size
Log files are rotated when they grow bigger than size bytes even before
the additionally specified time interval (daily, weekly, monthly,
or yearly). The related size option is similar except that it
is mutually exclusive with the time interval options, and it causes
log files to be rotated without regard for the last rotation time.
When maxsize is used, both the size and timestamp of a log file are
considered.
Ecco un esempio:
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail [email protected]
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
Ecco una spiegazione per entrambi i file /var/log/httpd/access.log
e /var/log/httpd/error.log
. Vengono ruotati ogni volta che superano i 100k di dimensione e i vecchi file di registro vengono inviati (non compressi) a [email protected]
dopo aver effettuato 5 rotazioni, invece di essere rimosso. Il sharedscripts
significa che il postrotate
lo script verrà eseguito solo una volta (dopo che i vecchi log sono stati compressi), non una volta per ogni log che viene ruotato. Si noti che le doppie virgolette attorno al primo nome file all'inizio di questa sezione consentono a logrotate di ruotare i log con spazi nel nome. Si applicano le normali regole di citazione della shell, con ,
e \
caratteri supportati.