Portál AbcLinuxu, 10. května 2025 08:08

Dotaz: mazani starych souboru - zaloh

16.6.2008 18:14 jerry
mazani starych souboru - zaloh
Přečteno: 1217×
Odpovědět | Admin
Zdravicko.

potrebuju mazat denni zalohy starsi dvou dnu. Ve skriptu, ktery mi zalohuje mam tohle find zaloha-etc* -mtime +2 -print0 | xargs -0 rm -f. Kolikrat se ale stane, ze mi ty zalohy starsi nesmaze (pusteno cronem pokazde ve stejny cas). Kdyz to ale pustim rucne (tj. v jakykoliv jiny cas), tak se stare smazou a je vse OK. Nekde jsem tady cetl, ze to muze byt opozdenym koncem zalohy a hned to nesplni podminku casu. Jak ale mazat, aby koukal jen na datum a ne na cas? (jen doplnim, ze zalohy neprovadim kolem pulnoci)
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.6.2008 18:38 ams
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neni-li to tim, ze tam ma byt find -name 'zaloha-etc*' -mtime....?
16.6.2008 18:38 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co parametr zadat takto: -daystart -mtime 3
16.6.2008 18:41 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Odpovědět | | Sbalit | Link | Blokovat | Admin
diky, ted ale nevim, jestli to jsou Vase domnenky nebo konstatovani:-) Nemuzu to ted vyzkouset, protoze to dela fakt jen nekdy a v Cronu ve stejny cas...
16.6.2008 18:45 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Domněnka :-), která vychází z man. Já bych to ale neřešil, stejně se smažou, pouze o den později :-)
Measure times from the beginning of today rather than from 24 hours ago. So, to list the regular files in your home directory that were modified yesterday, do

find ~/ -daystart -type f -mtime 1
16.6.2008 18:47 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
setrim misto :-) a jeste mi do mailu prijde info, ze zaloha nebyla provedena.. i kdyz byla, ale stara se nesmazala..
16.6.2008 18:57 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
pro ilustraci:
#!/usr/bin/env bash

# promenne
CIL="/usr/zaloha"
ZDROJ="/etc"
PREFIX="etc_"
POSTFIX="`date +%d%m%y`.tar.bz2"
NAZEV=${PREFIX}${POSTFIX}

# vyzalohuje adresar $ZDROJ
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null &&

# upravi prava zalohy
chmod 640 ${CIL}/${PREFIX}* &&

# nalezne a smaze zalohy starsi xx dni
find ${CIL}/${PREFIX}* -mtime +2 -print0 | xargs -0 rm -f

# synchronizuje s DVD-RAM
rsync -av --delete /usr/zaloha/ /media/dvd-ram/

# zasle informacni e-mail a zapise stav do logu
if [[ `echo $?` -eq 0 ]]; then
	echo -e "`date` Zaloha "$ZDROJ" byla provedena." >> /var/log/zaloha.log
	mail -s "zaloha "$ZDROJ"" email@example.net <<-MESSAGE

Dobry den,

   Zaloha "$ZDROJ" byla provedena v `date +%H:%M` `date +%d.%m.%Y`
   a je ulozena na serveru v "$CIL/$NAZEV"
   
                                       Vas zalozni server :)

MESSAGE
	else
		echo -e "`date` Zaloha "$ZDROJ" SKONCILA CHYBOU!" >> /var/log/zaloha.log
		mail -s "zaloha "$ZDROJ"" email@example.net <<-MESSAGE

Dobry den,

   Zaloha "$ZDROJ" NEBYLA PROVEDENA v `date +%H:%M` `date +%d.%m.%Y`.
   
                                       Vas zalozni server :(

MESSAGE
fi
#end
jinak mam tehle scriptu vic (na jine adresare) a jediny problem mi dela ten /etc ... zajimavy, scripty jsou identicky, jen menim promenne...
16.6.2008 20:10 ams
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Tady ma byt find find ${CIL} -name "${PREFIX}*" -mtime +2 ...
16.6.2008 21:34 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
dik, vyzkousim. Snad to bude ono :-)
18.6.2008 16:30 Jula
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
tak problem to nevyresilo :-(
18.6.2008 17:31 VSi | skóre: 28
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Odpovědět | | Sbalit | Link | Blokovat | Admin
Používám trochu jiný způsob. Trochu problém u řešení "starší než 2 dny" vidím v tom, že pokud počítač bude např. 2 dny vypnutý, tak potom 3. den, až ho zapneš, smaže všechny zálohy kromě poslední. Nemusí to být jen úmyslné vypnutí, ale třeba výpadek napájení v době naplánované zálohy.

Jde to snad řešit cronem, který může úlohu spustit při bootu, pokud neproběhla. Ale nemám to vyzkoušené a navíc to stejně moc nepomůže, protože provede zálohu novou, třeba s poškozenými daty a ty staré smaže.

Lepší metoda je podle mě mazat zálohy "starší, než poslední 2" (posledních X).

Takhle po provedení zálohy zachovávám 7 nejnovějších záloh nezávisle na tom, kdy byly provedené:

# Delete older than last 7 backups (not 7 days)
  ls -1t $DESTINATION | grep ^prefix | tail -n +8 | xargs rm
18.6.2008 19:16 Jula
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
to by bylo super, ale:
server:/usr# ls -1t /usr/zaloha | grep ^var_www_ | tail -n +4
var_www_150608.tar.bz2

server:/usr# ls -1t /usr/zaloha | grep ^var_www_ | tail -n +4 | xargs rm
rm: cannot remove `var_www_150608.tar.bz2': není souborem ani adresářem
18.6.2008 19:24 Jula
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
prikaz funguje jen v pripade, ze jsem v adresari /usr/zaloha, jak to osetrit?
18.6.2008 20:08 VSi | skóre: 28
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
To je pravda, protože ls nevypisuje absolutní cestu.

Jako nejjednodušší řešení jsem použil to, že se před tím uvedeným příkazem na odstranění záloh přesunu do patřičného adresáře: cd $DESTINATION

Další možností by bylo doplnit ještě příkaz, který zyčátek každého řádku výstupu z ls doplní o ${DESTINATION}/. Napadá mě ošklivé řešení s awk, ale určitě by na to bylo lepší použít nějaký jiný příkaz:

ls -1t $DESTINATION | grep ^prefix | tail -n +8 | awk '{ "/usr/zaloha/" $0 }' | xargs rm

Místo /usr/zaloha/ by tam mělo být obecnější ${DESTINATION}, ale nepřišel jsem na to, jak escapovat ty uvozovky, aby došlo k expanzi proměnné.
19.6.2008 00:07 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
var="ahoj"
gawk -v var2="$var" 'BEGIN {print var2}'
19.6.2008 01:02 VSi | skóre: 28
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
V tom awk mi ve složených závorkách vypadlo print.

Takže by to mohlo být nějak takhle:
ls -1t "$DESTINATION" | grep ^prefix | tail -n +8 | awk -v dir="$DESTINATION" '{ print $dir "/" $0 }' | xargs rm
19.6.2008 01:06 VSi | skóre: 28
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Tak snad poslední oprava, místo $dir má být jen dir, bez $.
ls -1t "$DESTINATION" | grep ^prefix | tail -n +8 | awk -v dir="$DESTINATION" '{ print dir "/" $0 }' | xargs rm
19.6.2008 09:52 pet
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle maze vse starsi cca 1/2 roku a funguje to:

find /home/catt/srv/rec/ -mtime +190 -exec rm {} \;
19.6.2008 14:27 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Odpovědět | | Sbalit | Link | Blokovat | Admin
kdyz nebudu brat to mazani starych zaloh, tak i kdyz ho v tom scriptu zakomentuju, tak mi proste do mailu prijde, ze zaloha /var/www nebyla provedena... nekdy (malokdy) ale provedena byla. A pri rucnym spusteni je provedena vzdy. Takze problem neni v tom mazani, ale v necem jinym.. Proc mi /var/lib a /home zalohuje vzdycky? Nemuze to byt tim, ze kdyz to tar bali, tak se v tom adresari neco zmeni a hned je problem? V adresari, kde se zalohy ukladaji, tu zalohu ale mam a jde i rozbalit...to nema logiku..
19.6.2008 15:04 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Podle výše uvedeného scriptu návratový kód, který se vyhodnocuje v if cyklu, pochází od utility rsync, takže zde bych hledal možné problémy. Nebo na začátek scriptu přidej set -x a vyhodnocování si pak můžeš prohlédnout v mailu.
19.6.2008 15:30 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Nastavil jsem set-x a proste posledni povel byl ten tar a pak uz odeslani mailu, ze se zaloha nepovedla...
19.6.2008 16:13 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Pokud ten script spouštíš pod běžným uživatelem a taruješ /etc/, tak je problém s právy.
19.6.2008 16:50 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
spoustim to jako root.. problem mam jen s /var/www . /var/etc je uplne bez problemu... nechapu to...
19.6.2008 20:04 Ash | skóre: 53
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
U taru jste přesměrování 2>/dev/null odstranil? Případně přesměroval do logu? Bylo tam něco? Jinak if [[ `echo $?` -eq 0 ]] je překombinované, použijte if [[ $? -eq 0 ]].
19.6.2008 20:36 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
u taru jsem nepresmeroval nic.. pouzivam tenhle script a tim to konci.. /etc /usr /home a mountlej disk z win stanice zalohuju bez problemu, jedine /vae/www mi posle hlasku z chybou, presto se zaloha provede
19.6.2008 21:10 Ash | skóre: 53
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Asi jsem špatně pochopil to vaše "Nastavil jsem set-x a proste posledni povel byl ten tar a pak uz odeslani mailu, ze se zaloha nepovedla... ".
19.6.2008 21:50 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
set -x jsem zapsal na zacatek toho scriptu, a do mailu mi prisel vypis, ktery prikaz se provadi, ale zadne vetsi detaily, jak to dopadlo, tam nebyly,,,
19.6.2008 21:54 VSi | skóre: 28
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
Pro testování by bylo dobré na konci řádku s tarem odstranit to přesměrování chybového výstupu, tj. 2>/dev/null. Takhle přicházíš právě o ten chybový výstup, kde tar možná říká, proč skončil neúspěsně.
19.6.2008 23:44 jerry
Rozbalit Rozbalit vše Re: mazani starych souboru - zaloh
aha, vubec jsem si toho nevsiml... omlouvam se kolegovi vyse.. pak sem poslu vypis

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.