Řešení 1:
Můžete použít:
> /var/log/mail.log
To zkrátí protokol, aniž byste museli soubor upravovat. Je to také spolehlivý způsob, jak získat prostor zpět. Někdy lidé dělají tu chybu, že v protokolu použijí rm a poté znovu vytvoří název souboru. Pokud má soubor otevřený jiný proces, nezískáte místo zpět, dokud tento proces nezavře jeho popisovač a vy můžete zkazit jeho oprávnění.
Také pokud sledujete obsah protokolu, můžete použít tail
příkaz:
tail -f /var/log/mail.log
Ctrl-C odlomí okraj.
Řešení 2:
Ano, existuje správný způsob:nevymažete logy vůbec. Otáčíte jim. Rotace zahrnuje přepnutí výstupu protokolu do nového souboru pod stejným názvem, přičemž předchozí soubory protokolu N budou uloženy pod sadou N souvisejících názvů souborů.
Jak se protokoly otáčí, závisí především na tom, jak je zapisujete. To je často přehlížený bod. Některé ze zde uvedených odpovědí se toho alespoň dotýkají a zmiňují, že některé protokolovací programy uchovávají otevřený popisovač souboru pro soubor protokolu, takže pouhé smazání souboru neuvolní místo a dokonce ani nepřepne výstup na nový soubor protokolu.
Pokud je program zapisující soubor protokolu multilog
z daemontools
například balíček, pak neuděláte vůbec nic pro rotaci protokolů — žádné ruční skripty, žádné cron
pracovní místa. Jednoduše řekněte multilog
že výstup protokolu je do adresáře a sám bude udržovat automaticky otočenou a velikostně omezenou sadu N souborů protokolu v tomto adresáři.
Pokud je program zapisující soubory protokolu svlogd
z runit
pro jiný příklad pak platí v podstatě totéž. Neděláte vůbec nic kromě namíření nástroje na adresář. Sám bude udržovat automaticky otočenou a velikostně omezenou sadu N log souborů v tomto adresáři.
Pokud používáte rsyslog
zapisovat soubory protokolu, pak lze programu protokolování říci, aby se zastavil poté, co soubor protokolu dosáhne určité velikosti a spustil skript. Musíte napsat jádro skriptu, abyste skutečně přejmenovali soubor protokolu a smazali staré soubory protokolu na základě omezení celkové velikosti, ale alespoň protokolovací program uzavřel soubor a pozastavil zápis protokolu, zatímco se to děje.
Starý syslogd
způsob rotace protokolů, stále očekávaný protokolovacími programy, jako je syslog-ng a jehož příkladem jsou nástroje jako logrotate
zmíněno djangofan
v jiné odpovědi zde je poněkud náhodnější. Jeden spustí cron
úloha, která pravidelně přejmenovává soubory protokolu a restartuje démona protokolování (pomocí jakéhokoli správce démona, pod kterým běží). Problém s tím samozřejmě je, že to nevynucuje omezení celkové velikosti. V pomalých týdnech lze získat N velmi malých denních souborů protokolu, zatímco v rušných dnech lze získat 1 velmi velký soubor protokolu, který značně překračuje limit velikosti.
To je důvod, proč novější a lepší nástroje jako multilog
a svlogd
mít možnosti konfigurace velikosti souboru a skutečně kontrolovat velikosti souborů protokolu, samozřejmě. Svět se dozvěděl, že dotazování protokolů podle plánu pomocí cron
pracovních míst, nebo dokonce logrotate
démon, ponechává okna pro špatnou velikost a správné místo pro tyto kontroly, a tak důsledně vynutit administrátorem definovaná omezení velikosti, aby soubory protokolu nikdy nepohltily oddíl, na kterém jsou, je v první řadě v programu, který soubory ve skutečnosti zapisuje.
Řešení 3:
Můžete použít i toto..
truncate /opt/package/logs/*.log --size 0
Zde budou všechny soubory protokolu v /opt/package/logs prázdné..
Řešení 4:
Ano, existuje nástroj pro linux s názvem LogRotate.
Řešení 5:
Pokud je důvodem pro vymazání protokolu uvolnění místa, můžete k nim zařadit /dev/null, aniž byste přerušili zápis programů do něj. Nikdy je nemažte! některý software si může stěžovat tím, že přestane fungovat nebo úplně ignoruje protokol až do příštího restartu
cat /dev/null > /path/to/logfile
# to empty all the logs in a directory
for i in /var/log/*; do cat /dev/null > $i; done