18 Feb
Jak wiadomo, cron to bardzo przydatne narzędzie służące do uruchamiania przeróżnych komend (programów, skryptów itd.) wg ustalonego harmonogramu. Na przykład można dzięki temu automatycznie raz na dobę (albo co tydzień, albo co 2 godziny, albo co dwie godziny w dni powszednie a w weekendy co godzinę, albo jeszcze inaczej) wykonywać kopię zapasową. W tym celu można przygotować sobie taki oto skrypt powłoki:
#!/bin/sh ZAPISZTU='/backup' CZAS=`date +%Y-%m-%d_%H-%M-%S` PLIK=backup_"$CZAS".zip ZBACKUPUJTO='/var/www/htdocs' REMOTE='/backup/strona-www' HOST='ftp.twojserwer.pl' USER='uzytkownik-ftp' PASSWD='haslo-ftp' cd "$ZAPISZTU" zip -r9 "$PLIK" "$KATALOG" ftp -n $HOST <<END_SCRIPT quote USER $USER quote PASS $PASSWD cd $REMOTE put $PLIK quit END_SCRIPT rm "$ZAPISZTU"/"$PLIK"
Powyższy skrypt powłoki spakuje katalog /var/www/htdocs (rekurencyjnie, odpowiada za to opcja -r, cyfra 9 oznacza maksymalny stopień kompresji), zapisze archiwum w katalogu /backup, wyśle archiwum na serwer FTP i skasuje archiwum z dysku twardego. Oczywiście warto by było dorobić tu jeszcze jakieś przechwytywanie błędów, ale na potrzeby omawianego tematu nie będę tu zaciemniał kodu.
Odpalmy nasz skrypt “z ręki”:
# sh /sciezka/do/skryptu/skrypt.sh
Powinien zadziałać bez problemu.
Teraz dopiszmy go do cron-a. W tym celu dodajmy poniższy wpis do pliku /var/cron/tabs/root:
15 12 * * * /bin/sh /sciezka/do/skryptu/skrypt.sh >/sciezka/do/skryptu/skrypt.log 2>&1
Powyższy wpis odpali nasz skrypt codziennie o godzinie 12.15 a w pliku skrypt.log zapisze co się działo podczas wykonywania naszego skryptu. Koniecznie musimy podać pełne ścieżki! Teraz zrestartujmy cron-a i poczekajmy:
# kill `cat /var/run/cron.pid`
# /usr/sbin/cron
Gdy minie wskazana godzina zajrzyjcie na serwer FTP, czy coś się tam pojawiło. Albo nie zaglądajcie – powiem wam: nie pojawiło się. Dlaczego? Zajrzyjmy do pliku skrypt.log. I co? Ano kaszana – znajdziemy tam między innymi takie coś:
/sciezka/do/skryptu/skrypt.sh[15]: zip: not found
ftp: local: backup_2008-02-18_12-15-01.zip: No such file or directory
czyli:
Okazuje się, że przy odpalaniu skryptu powłoki za pomocą cron, nie dość że w tabeli cron-a musimy się posłużyć pełnymi ścieżkami, to i w samym skrypcie powłoki także. Oto jak powinien wyglądać poprawny skrypt:
#!/bin/sh ZAPISZTU='/backup' CZAS=`date +%Y-%m-%d_%H-%M-%S` PLIK=backup_"$CZAS".zip ZBACKUPUJTO='/var/www/htdocs' REMOTE='/backup/strona-www' HOST='ftp.twojserwer.pl' USER='uzytkownik-ftp' PASSWD='haslo-ftp' cd "$ZAPISZTU" /usr/local/bin/zip -r9 "$PLIK" "$KATALOG" ftp -n $HOST <<END_SCRIPT quote USER $USER quote PASS $PASSWD cd $REMOTE put $PLIK quit END_SCRIPT rm "$ZAPISZTU"/"$PLIK"
I to jest rozwiązanie problemu na jaki natrafia wielu początkujących użytkowników OpenBSD (w tej liczbie i ja ;-) ).
5 odpowiedzi for "Uruchamianie skryptu powłoki z cron"
Witam mam problem mam Dystrybucje Debian 4.0 i niedzila mi ten skrypt a chcialem go przerobic zeby pakowal mi baze danych mysql i wysylal na ftp czy moglbym prosic o taki skrypt bylbym wdzieczny
Za mało informacji podałeś…
Ten skrypt nie działa jak należy. Po przesłaniu pliku backup….zip na server ftp archiwum jest uszkodzone. Moze ktoś w końcu wrzuci jakaś sensowna wersje?
Prównaj pliki na serwerze źródłowym i docelowym czy mają takie same rozmiary – może masz problem z transferem. Sprawdź w jakim trybie wysyłasz plik – może powinieneś przełączyć się na binarny.
Mi ten skrypt działa (chodzi na OpenBSD), przerobiłem go sobie tak żeby pakował nie ZIPem tylko 7zipem (lepsza kompresja choć dłużej trwa). Odpalam go z crona codziennie od pół roku i jeszcze nie miałem problemu.
Żeby backupować bazy MySQL trzeba sobie zmienić odpowiednio ścieżki i tyle.
Server FTP, który przyjmuje pliki kopii jest na Windows. Próbowałem róże programy ftp, ale w kazdym przesyła z błędem. Na serverach ftp linuksowych wszystko przesyła się jak trzeba. Ja pracuje na Debianie, ale komputer z windows ma duze dyski i tam chciałem składowac dane, ale niestety nie działa.
Czyli sam skrypt jest OK. Musisz wysłać plik w trybie binarnym. Zajrzyj np. tu:
http://www.circa.ufl.edu/handouts/networks/ftp.html#toc6
i tu:
http://www.circa.ufl.edu/handouts/networks/ftp.html#toc7
Zostaw odpowiedź
Musisz być zalogowany/zalogowana, aby móc wysłać komentarz.