Automatické smazání souborů určité velikosti

webhope

Automatické smazání souborů určité velikosti
« kdy: 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
« Poslední změna: 08. 04. 2010, 23:56:40 od Petr Krčmář »


Re: Smazání souboru
« Odpověď #1 kdy: 08. 04. 2010, 21:39:19 »
Pane webhope, vy jste horší, než leckterý spambot  :D

Což takhle použít
Kód: [Vybrat]
find . -size +5M -exec rm {} \;

webhope

Re: Smazání souboru
« Odpověď #2 kdy: 08. 04. 2010, 22:22:36 »
To bude asi tím, že jsem inteligentní spambot  8)

Díky, trochu jsem to vylepšil

Kód: [Vybrat]
# 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 {} \;

Re: Smazání souboru
« Odpověď #3 kdy: 08. 04. 2010, 22:38:21 »
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:
Kód: [Vybrat]
# 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:
Kód: [Vybrat]
$ cat /dev/zero > soubor.test & rm soubor.testA sledujte, jak ubývá volné místo na disku :)
« Poslední změna: 08. 04. 2010, 22:47:12 od Ondřej Caletka »

webhope

Re: Smazání souboru
« Odpověď #4 kdy: 08. 04. 2010, 23:07:51 »
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š.


dustin

Re: Automatické smazání souborů určité velikosti
« Odpověď #5 kdy: 09. 04. 2010, 09:11:46 »
Logrotate má konfigurace v /etc/logrotate.d/

Re: Smazání souboru
« Odpověď #6 kdy: 09. 04. 2010, 09:58:56 »
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.

webhope

Re: Automatické smazání souborů určité velikosti
« Odpověď #7 kdy: 09. 04. 2010, 10:02:01 »
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
Kód: [Vybrat]
/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.

Re: Automatické smazání souborů určité velikosti
« Odpověď #8 kdy: 09. 04. 2010, 12:47:33 »
Citace
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í..

webhope

Re: Automatické smazání souborů určité velikosti
« Odpověď #9 kdy: 09. 04. 2010, 13:23:37 »
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.
« Poslední změna: 09. 04. 2010, 21:10:35 od webhope webhope »