Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: webhope 08. 04. 2010, 21:12:19

Název: Automatické smazání souborů určité velikosti
Přispěvatel: 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
Název: Re: Smazání souboru
Přispěvatel: Ondřej Caletka 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 {} \;
Název: Re: Smazání souboru
Přispěvatel: webhope 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 {} \;
Název: Re: Smazání souboru
Přispěvatel: Ondřej Caletka 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 :)
Název: Re: Smazání souboru
Přispěvatel: webhope 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š.
Název: Re: Automatické smazání souborů určité velikosti
Přispěvatel: dustin 09. 04. 2010, 09:11:46
Logrotate má konfigurace v /etc/logrotate.d/
Název: Re: Smazání souboru
Přispěvatel: Ondřej Caletka 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.
Název: Re: Automatické smazání souborů určité velikosti
Přispěvatel: webhope 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.
Název: Re: Automatické smazání souborů určité velikosti
Přispěvatel: Chytrex Pitriss 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í..
Název: Re: Automatické smazání souborů určité velikosti
Přispěvatel: webhope 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.