Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: webhope 08. 04. 2010, 21:12:19
-
Mám takovýto příkaz:
find * -printf "%s %f \n"
A chtěl bych %s a %f zpracovat tak, aby pokud je %s větší než 5MByte se smazal soubor %f. Mohl bych to udělat pomoci cyklu, ale asi by to bylo dost neohrabané. Tak jsem se raději zeptal, jestli by to nešlo třeba přes awk, nějak jednodušeji. Dík za radu
-
Pane webhope, vy jste horší, než leckterý spambot :D
Což takhle použít
find . -size +5M -exec rm {} \;
-
To bude asi tím, že jsem inteligentní spambot 8)
Díky, trochu jsem to vylepšil
# smazat logy, které jsou větší než 5MB (v pondělí nebo ve čtvrtek)
[ `date +%u` -eq 1 ] || [ `date +%u` -eq 4 ] && find /var/log -size +5M -exec rm {} \;
-
Když poodhlédnu od úvahy, jaký má asi smysl mazat logy, kde se něco děje (a nabývají) a zachovávat logy, kde se nic neděje, zajímala by mě jiná věc:
# smazat logy, které jsou větší než 5MB (v pondělí nebo ve čtvrtek)
[ `date +%u` -eq 1 ] || [ `date +%u` -eq 4 ] && find /var/log -size +5M -exec rm {} \;
A tohle budete spouštět jak? Ručně? Předpokládám, že cronem. Tak proč nenastavit cron tak, aby to spouštěl jen v pondělí nebo ve čtvrtek. Spouštět to každý den a testovat jestli náhodou není pondělí nebo čtvrtek mi připadá krapet nesystémové.
Poznámka na závěr:
Předpokládám, že jste slyšel o programu logrotate.
Poznámka na závěr 2:
Pokud odstraníte soubor, který má nějaký proces otevřený, k faktickému odstranění dojde až po uzavření všech deskriptorů popisujících daný soubor. Což může být u trvale běžícího démona za hooodně dlouho. Typická ukázka:
$ cat /dev/zero > soubor.test & rm soubor.test
A sledujte, jak ubývá volné místo na disku :)
-
Neslyšel. Tak asi ten logrotate u mě nefunguje správně, protože mi nechal na disku tři nebo čtyři logy o velikosti větší než 100MB. Což se mi tedy zdá přes příliš.
-
Logrotate má konfigurace v /etc/logrotate.d/
-
Neslyšel. Tak asi ten logrotate u mě nefunguje správně, protože mi nechal na disku tři nebo čtyři logy o velikosti větší než 100MB. Což se mi tedy zdá přes příliš.
Možná nemáte spuštěný cron, nebo nemáte zadanou úlohu logrotate v cronu.
Nebo všechno máte správně, ale nějaký proces vám generuje každou sekundu deset řádků logu. Pak je ale na místě umravnit ten proces.
-
Podle toho co jsem se dočetl tak by k tomu nemělo docházet, aby tam vznikaly tak velké soubory. Dočetl jsem se, že to každý týden rotuje. Takže pokud jsem to pochopil správně, tak by ten aktuální soubor měl mít malou velikost. Ale není tomu tak. Ten konfigurák logrotate.conf ještě chápu. Logrotate už moc ne:
# syslog logrotate configuration
/var/log/auth.log /var/log/messages /var/log/syslog /var/log/user.log /var/log/explanations /var/log/boot.log /var/log/mail/*.log /var/log/cron/*.log /var/log/kernel/*.log /var/log/daemons/*.log {
sharedscripts
postrotate
[ -f /var/run/syslog-ng.pid ] && kill -HUP `cat /var/run/syslog-ng.pid` || true
[ -f /var/run/syslogd.pid ] && kill -HUP `cat /var/run/syslogd.pid` || true
endscript
Nicméně ten script na automatické mazání mi funguje dobře.
-
Nicméně ten script na automatické mazání mi funguje dobře.
Jo jak bylo výše zmíněno, do doby než si nějaký proces podrží nějaký používaný soubor... už jen z toho důvodu bych to mazání dělal jen pomocí logrotate.. to umí i restartovat služby kterým odrotuje logy.. A další fakt je to, že pokud něco spamuje do logu, tak to asi chce nějako usměrnit appku která spamuje.. Mazání logů je jako zavřít oči před autonehodou místo zabrždění..
-
O cronu jsem četl tento článek:
http://interval.cz/clanky/jak-na-demona-cron/
Jinak mě hodně zaujalo to co se tam píše o konverzi php na cgi, o tom si rád počtu.