Fórum Root.cz
Hlavní témata => Server => Téma založeno: vana-hb 31. 08. 2014, 20:07:34
-
Ahoj mám udělaný jednoduchý zálohovací skript který pouští crone ve dvě ráno. Idea je, že připravim data pro zálohování, připojim disk kde smažu starou zálohu starší než dva dny, nahraji novou a disk odpojím. Super.
#!/bin/bash
datum=$(date +%s)
rm -rf /zalohy/*
mkdir /zalohy/"$datum"
mkdir /zalohy/"$datum"/hosting
mkdir /zalohy/"$datum"/mysql
cd /var/www/clients
for dir in *; do
if [ -d $dir ]; then
tar -c $dir | gzip > /zalohy/"$datum"/hosting/$dir.tar.gz
fi
done
mount -t cifs -o username=XXXX,password=XXXX //3862.s62.wedos.net/XXXX /mnt/wdisk/
find /mnt/wdisk/s1/denni/* -maxdepth 0 -type d -mtime +1 | xargs rm -rf
cp -r /zalohy/* /mnt/wdisk/s1/denni/
umount /mnt/wdisk/
Problém mi dělá příkaz pro mazání záloh starších než dva dny:
find /mnt/wdisk/s1/denni/* -maxdepth 0 -type d -mtime +1 | xargs rm -rf
Když pustím celý skript cronem tak se staré zálohy nemažou. Když tento příkaz tak jak je okopíruji do příkazového řádku a pustím ručně tak se staré zálohy vymažou.
MOhl by mi někdo poradit v čem je zakopaný pes prosím????
-
Dík za nápad ale u mě to takhle nefunguje. Zkusil jsem jen to hledání kdy jsem změnil -mtime na +0 protože předvčerejší už je smazaná a bez /* mi to nehledá?
[root@xxxx scr]# find /mnt/wdisk/s1/denni/* -maxdepth 0 -type d -mtime +0
/mnt/wdisk/s1/denni/1409356801
[root@xxxxx scr]# find /mnt/wdisk/s1/denni -maxdepth 0 -type d -mtime +0
[root@xxxxx scr]#
-
Nemáš náhodou hosting dohromady s Fotkou? :D
-
Smazal jsem předchozí komentář, nejapně se snažil poradit variantu, která měla za úkol smazat všechny připojené disky.
K věci: Pokud se nějaký příkaz na řádce spustí, ale Cronu se nelíbí, obvykle je to tím, že Cron nemá ve svém prostředí stejné cesty jako uživatel. Doporučuji proto k použitým příkazům přidat celou cestu, například /usr/bin/find a podobně.
-
Petr na to pravdepodobne kapnul - zkus absolutni cestu k prikazu find
OT: doporuciji prostudovat parametry "--delete" popr "--exec" u prikazu find
-
Tak jsem ten příkaz upravil že jsem tam přidal cestu k find a rm a stejně to nefunguje ... z řádky ano, z crone ne. Nevim?
/bin/find /mnt/wdisk/s1/denni/* -maxdepth 0 -type d -mtime +0 | xargs /bin/rm -rf
-
Jen hadam... mozna jeste pridat absolutni cestu k xargs
-
Tak jsem ten příkaz upravil že jsem tam přidal cestu k find a rm a stejně to nefunguje ... z řádky ano, z crone ne. Nevim?
/bin/find /mnt/wdisk/s1/denni/* -maxdepth 0 -type d -mtime +0 | xargs /bin/rm -rf
A dojde to vůbec k tomu příkazu find? cron umí mailovat výstup, a rozhodně bych k tomu dodal i stderr. Takže skript by začínal
#!/bin/bash -x
což by zajistilo logování spouštěných příkazů na stderr. Kdyby z nějakého důvodu nepřipadalo mailování v úvahu, hned následující řádka
exec >log 2>&1
by zajistila uložení výstupu, včetně stderr, do souboru "log".
-
Po jakým uživatelem cron ten skript spouští? Jestli nemůže být problém s právy. Problém můžou dělat taky jiné proměnné prostředí. Podíval bych se do logu cronu.
-
Cron úloha se spouští jako root a v logu nic zajímavého.
Ohledně těch cest. Udělám něco špatně když nastavim výchozí cesty přímo do cron job(u) tak že to bude vypadat následovně? Pak bych přeci nemusel psát celé cesty ke každému příkazu. Je to tak?
## backup jobs#
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
0 2 * * * root /scr/zdenni
To s tim logováním otestuji. Zatim moc dík.
-
Ano, takto nastavená PATH by se měla projevit (pokud tam nemáte nějaký obskurní/minimalistický cron, který to neumí). V daném případě bych trasoval provádění skriptu jak bylo nastíněno už výše.
-
Jen poznámka:
pozor na xargs když nedostane žádný vstup, což se u výstupu z příkazu find může lehce stát.
Doporučuji vždy zvážit, jestli by se u xargs nehodilo přidat switch -r nebo --no-run-if-empty
(Popis switche v man xargs)
-
Snad nam vana-hb napise jak dopadl, tj. v cem byl problem, at z toho taky neco mame :).
-
jak psal p. krcmar - obvykle je to o cestach, staci pridat absolutni ke vsem prikazum.
pripadne zkontrolovat korektni nastaveni casu v tom spoustecim cronu.
nic sloziteho bych v tom nehledal.
-
Abych nedlužil odpověď, řekl bych, že se to rozchodilo po přidání cest do crone skriptu:
# backup jobs
[b]SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin[/b]
0 2 * * * root /scr/zdenni
s touhle verzí přílkazu ve spouštěném skriptu:
/bin/find /mnt/wdisk/s1/denni/* -maxdepth 0 -type d -mtime +0 | xargs /bin/rm -rf
Takhle to fuguje. Myslim, že teď s cestama v crone skriptu by šlo používat jen krátký zápis u příkazů. Mám CentOS 6.5 2.6.32-431.1.2.0.1.el6.x86_64
Tak moc děkuji za nasměrování. vana-hb