Jak zmínil Zeeshan, možnosti logrotate size
, minsize
, maxsize
jsou spouštěče rotace.
Abych to lépe vysvětlil. Logrotate můžete spouštět tak často, jak chcete, ale pokud není dosaženo prahové hodnoty, jako je dosažená velikost souboru nebo neuplynula vhodná doba, protokoly nebudou rotovány.
Možnosti velikosti nezajistí, že vaše otočené protokoly budou mít také zadanou velikost. Aby se přiblížily zadané velikosti, musíte dostatečně často volat program logrotate. To je kritické.
U souborů protokolu, které se hromadí velmi rychle (např. ve stovkách MB za den), pokud nechcete, aby byly velmi velké, budete muset zajistit časté volání logrotate! to je kritické.
Proto, abyste zabránili zaplňování disku vícegigabajtovými soubory protokolu, musíte zajistit, aby bylo logrotate voláno dostatečně často, jinak rotace protokolu nebude fungovat tak dobře, jak chcete.
na Ubuntu můžete snadno přepnout na hodinovou rotaci přesunutím skriptu /etc/cron.daily/logrotate do /etc/cron.hourly/logrotate
Nebo přidejte
*/5 * * * * /etc/cron.daily/logrotate
Do vašeho souboru /etc/crontab. Chcete-li jej spustit každých 5 minut.
size
ignoruje denní, týdenní a měsíční časové možnosti. Ale minimální a maximální velikost to berou v úvahu.
Manová stránka je tam trochu nepřehledná. Zde je mé vysvětlení.
minsize
se otáčí pouze tehdy, když soubor dosáhne vhodné velikosti a uplynula nastavená doba. např. minimální velikost 50 MB + denně Pokud soubor dosáhne 50 MB před odškrtnutím denního času, bude se zvětšovat až do dalšího dne.
maxsize
se otočí, když protokol dosáhne nastavené velikosti nebo uplyne vhodná doba. např. max. velikost 50 MB + denně. Pokud má soubor 50 MB a ještě nejsme další den, protokol se otočí. Pokud má soubor pouze 20 MB a přejdeme na další den, soubor se otočí.
size
se otočí, když log> velikost. Bez ohledu na to, zda je zadáno hodinové/denní/týdenní/měsíční. Takže pokud máte velikost 100M – znamená to, že když je váš soubor protokolu> 100M, protokol se otočí, pokud je spuštěno logrotate, když je tato podmínka splněna. Jakmile se otočí, hlavní protokol bude 0 a následný běh nic neudělá.
Tedy v případě op. Konkrétně 50 MB max. bych použil něco jako následující:
/var/log/logpath/*.log {
maxsize 50M
hourly
missingok
rotate 8
compress
notifempty
nocreate
}
Což znamená, že by vytvořil maximálně 8 hodin protokolů. A bylo by jich 8 po ne více než 50 MB. Vzhledem k tomu, že říká, že každý den získává několik gigabajtů, a za předpokladu, že se hromadí poměrně konstantní rychlostí a je používána maximální velikost, skončí s přibližně maximem dosaženým pro každý soubor. Každý se tedy pravděpodobně bude blížit 50 MB. Vzhledem k objemu, který vytvářejí, by musel zajistit, aby logrotate bylo spouštěno dostatečně často, aby bylo dosaženo cílové velikosti.
Protože jsem tam dal hodinu, potřebovali bychom, aby se logrotate spouštělo minimálně každou hodinu. Ale protože se hromadí řekněme 2 gigabajty za den a my chceme 50 MB... za předpokladu konstantní rychlosti, která je 83 MB za hodinu. Takže si dokážete představit, že když spustíme logrotate každou hodinu, i přes nastavení maxsize na 50 skončíme v tom případě s logy 83 MB. V tomto případě by tedy mělo stačit nastavení běhu na každých 30 minut nebo méně.
Zajistěte, aby se logrotate spouštělo každých 30 minut.
*/30 * * * * /etc/cron.daily/logrotate
Určuje velikost souboru protokolu ke spuštění rotace. Například size 50M
spustí rotaci protokolu, jakmile je velikost souboru 50 MB nebo větší. Můžete použít příponu M
pro megabajty k
pro kilobajty a G
za gigabajty. Pokud není použita žádná přípona, bude to znamenat bajty. Příklad si můžete zkontrolovat na konci. K dispozici jsou tři direktivy size
, maxsize
a minsize
. Podle manuálové stránky:
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.
Zde je příklad:
"/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
}
Zde je vysvětlení pro oba soubory /var/log/httpd/access.log
a /var/log/httpd/error.log
. Otáčejí se vždy, když velikost překročí 100 kB, a staré soubory protokolů jsou odesílány (nekomprimovány) na adresu [email protected]
po absolvování 5 otočení, spíše než aby byl odstraněn. sharedscripts
znamená, že postrotate
skript bude spuštěn pouze jednou (po zkomprimování starých protokolů), nikoli jednou pro každý rotovaný protokol. Všimněte si, že dvojité uvozovky kolem prvního souboru na začátku této části umožňují logrotate otáčet protokoly s mezerami v názvu. Platí normální pravidla pro citování shellu s ,
a \
podporované znaky.