Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
czy mozna to jakos jeszcze ulepszyc, uproscic itp.
#!/bin/bash declare -i MAILFAIL MAILFAIL=0 if test `date +%A`="Friday" then getfacl -R /home/*>/home/acl tar -c -g /var/log/backup`date +%Y-%m-%d`.log -f /tmp/backup-full-`date +%Y-%m-%d`.tar /home touch /var/log/backup/last-backup elfi test -e /var/log/backup/last-backup getfacl -R /home*>/home/acl find /home -type f -newer /var/log/backup/last-backup | tar --null -c -g /var/log/backup/backup-`date +%Y-%m-%d`log -f /tmp/backup-diff-`date +%T-%m-%d`.tar -T - fi MAILLOG=/var/log/backup-`date +%Y-%m-%d`.log MAILFAIL=`cat $MAILLOG | grep 'failed' | wc -l` if($MAILFAILgt0) then mail -s "BACKUP FAILED" root@server1.com fi
Ostatnio edytowany przez pink (2010-05-13 19:29:46)
Offline
pink napisał(-a):
Kod:
if test `date +%A`="Friday"
http://minio.jogger.pl/2009/11/21/popularne-bledy-p … ku-naturalnym
pink napisał(-a):
Kod:
MAILLOG=/var/log/backup-`date +%Y-%m-%d`.log MAILFAIL=`cat $MAILLOG | grep 'failed' | wc -l` if($MAILFAILgt0) then mail -s "BACKUP FAILED" root@server1.com fi
A to jest w ogóle jakiś potworek. Nie wiem jak wygląda zawartość pliku logu, ale powinno to wyglądać mniej-więcej tak:
if grep -q failed /var/log/backup-$(date +%Y-%m-%d).log ; then mail -s "BACKUP FAILED" root@server1.com fi
Z poprawką na to że musisz się upewnić że log będzie zawierał zwrot „failed”.
Ja bym po każdym poleceniu dawał
wyjscie=$(($wyjscie + $?))
i na końcu
if [ $wyjscie -ne 0 ]; then mail -s "BACKUP FAILED" root@server1.com fi
Rozważ jeszcze czy nie warto w załączniku maila o tym że kopia zapasowa się nie utworzyła załączać logu z wykonywania tejże kopii.
Offline
Zamiast elfi oczywiście elif.
Offline
#!/bin/bash if test `date +%u`="5" then getfacl -R /home/*>/home/acl tar -c -g /var/log/backup-`date +%Y-%m-%d`.log -f /tmp/backup-full-`date +%Y-%m-%d`.tar /home touch /var/log/backup/last-backup elif test -e /var/log/backup/last-backup then getfacl -R /home*>/home/acl find /home -type f -newer /var/log/backup/last-backup | tar --null -c -g /var/log/backup/backup-`date +%Y-%m-%d`log -f /tmp/backup-diff-`date +%T-%m-%d`.tar -T - fi if grep -q failed /var/log/backup-$(date +%Y-%m-%d).log ; then mail -s "BACKUP FAILED" root@server1.com fi
a tak lepiej
no i jeszcze nie wiem jak to sprawdzic co by sie w tym logu znalazlo gdyby sie backup posypał
Offline
pink napisał(-a):
no i jeszcze nie wiem jak to sprawdzic co by sie w tym logu znalazlo gdyby sie backup posypał
Minio napisał(-a):
Ja bym po każdym poleceniu dawał
Kod:
wyjscie=$(($wyjscie + $?))i na końcu
Kod:
if [ $wyjscie -ne 0 ]; then mail -s "BACKUP FAILED" root@server1.com fi
tar Ci zwróci liczbę inną niż zero jeżeli coś się nie powiedzie.
Offline
Przypisz date +%Y-%m-%d do zmiennej na początki skryptu i jej używaj, żeby nie wykonywać tej samej czynności kilkukrotnie. Nadto nietrudno wyobrazić sobie, że wykonywanie skryptu może się zakończyć następnego dnia.
no i jeszcze nie wiem jak to sprawdzic co by sie w tym logu znalazlo gdyby sie backup posypał
zatem dodaj warunek podczas wykonywania kopii — zamień
polecenie-wykonywania-kopii
na:
if ! polecenie-wykonywania-kopii; then mail -s "BACKUP FAILED" root@server1.com (; exit?)l fi
Offline
sorry chlopaki nie rozumiem co to ma byc to wyjsce???
Offline
Wyjście
A co do tego co jest na wyjściu to
man program
i będziesz mógł reagować w zależności od wyjścia
Offline
dobra moze mi ktos napisac jak to ma byc bo mnie szlak trafi.
chce sprawdzic czy plik istnieje i jak nie istnieje to wyslac maila "bacup failed".
Offline
to wiem ale mi chodzi aby sprawdzic wyjscie tar, czyli "0" istnieje i jest ok albo "gt 0" nie istnieje lub wystapily jakies bledy i wysla maila
Ostatnio edytowany przez pink (2010-06-11 15:09:42)
Offline
tar blebleble EXIT_STATUS=$? if [ ${EXIT_STATUS} -eq 0 ] then echo "huraaaa" else echo "dupa ;(" fi
Offline
o00000 juz cos blizej i jak obrazowo.
ten exit status to ma byc dokladnie po poleceniu tar????
i jak hurra mnie nie interesuje to wystarczy -gt 0
echo "dupaaaa" ???
Ostatnio edytowany przez pink (2010-06-11 16:01:43)
Offline
tak zaraz po tarze bo inaczej $? zwroci wynik ifa
jezeli 0 Cie nie interesuje to
if ! [ ${EXIT_STATUS} -eq 0 ]; then echo "dupa";fi
Offline
winnetou napisał(-a):
Kod:
tar blebleble EXIT_STATUS=$? if [ ${EXIT_STATUS} -eq 0 ] then echo "huraaaa" else echo "dupa ;(" fi
Tak naprawdę nie należy sprawdzać kodu wyjścia, a od razu wykonywać rzecz zależnie czy jest sukces, czy nie. Chyba, że akcji zależnych od kodu wyjścia jest kilka. Zatem:
if tar blebleble then echo "hura" else echo "dupa" fi
Minio chyba coś wspominał na ten temat: http://minio.jogger.pl/2009/11/21/popularne-bledy-p … ptow-powloki/
__
Kod:
if ! [ ${EXIT_STATUS} -eq 0 ]; then echo "dupa";fi
bój się bogów...
if [ ${EXIT_STATUS} -ne 0 ]; then echo "dupa";fi
i jak hurra mnie nie interesuje to wystarczy -gt 0
zatem wystarczy prosta konstrukcja
tar blebleble || echo dupa
Offline
azhag napisał(-a):
Kod:
if ! [ ${EXIT_STATUS} -eq 0 ]; then echo "dupa";fibój się bogów...
Kod:
if [ ${EXIT_STATUS} -ne 0 ]; then echo "dupa";fi
Przyznaję bez bicia zapomniałem jak jest oznaczany różny od ;] cały czas miałem w głowie != z C/C++ dlatego taki kosmiczny wynalazek. Co do bezpośredniego używania polecenia w warunku if'a to osobiście tak właśnie robię w swoich "skryptach" (cóż za szumna nazwa) ale tutaj padło pytania o to co to exit status i inne - poza tym ja się nie znam, lama jestem i tyle.
Offline
@azhag
jedna uwaga natury ogolnej - jak polecenie zajmuje kilka linijek to IMHO czytelniej jest zrobic za nim test na $? niz wkladac je w if
Offline
jak rozumiem -eq 0 znaczy rowne 0 tzn polecenie zakonczylo sie sukcesem co mnie nie interesuje w przypadku tego skryptu.
-gt 0 wiecej niz zero czyli polecenie zakonczylo sie bledem i tu wysyla maila
czyli chyba powinno byc tak
if [ ${EXIT_STATUS} -gt 0 ]; then echo "dupa";fi
bo caly czas piszecie mi -eq 0
i po co ten wykrzyknik po if ???
Ostatnio edytowany przez pink (2010-06-12 13:19:15)
Offline
eq - równy
gt - większy
ne - różny (czyli np 1, 5 ale też i -10)
a wykrzyknik był negacją
więc w ifie wpisz ne lub tak jak powiedział azhag pisz w [ $(polecenie) ]
Offline
winnetou napisał(-a):
lub tak jak powiedział azhag pisz w [ $(polecenie) ]
azhag niczego takiego nie powiedział.
Offline
zasugerował :)
Offline
nic z tych rzeczy, azhag napisał
if polecenie; then
ponieważ ma tu być tylko reakcja na błąd, to
if ! polecenie; then
lub
polecenie || coś
Offline
czyli podwojny pipe || robi cala robote (tj: sprawdza czy polecenie zostalo wykonane poprawnie czy wystapil blad, mam rozumiec)???
Offline
Tak. Podobnie jak if zresztą ([ jakiś warunek ] jest poleceniem, patrz man test).
W wersji uproszczonej można stosować łączniki poleceń && oraz ||. Pierwszy oznacza „oraz jeśli zakończy się sukcesem”, drugi „... błędem”.
Offline
no pelen szacun azhag, dzieki dla wszystkich - podejrzewam ze sie jeszcze odezwe w tym watku.
Offline