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/.
Strony: 1
Mam skrypcik odpalony w cronie, który pobiera codziennie o 8:00 plik .csv
wget --proxy --tries=5 --waitretry=600 http://zdalny_serwer/plik.csv -O /home/plik.csv
Ruch jest przez proxy i czasami przez to nie ściąga się plik (tworzy się plik o rozmiarze 0), kiedy odpali się po paru chwilach - ściąga się.
Chcąc się przed tym ustrzec wrzuciłem wget w warunek, który mi nie chce mi działać ;)
set rozmiar = "stat -c%s /home/plik.csv" while [$rozmiar -e 0 ]; do wget --proxy --tries=5 --waitretry=600 http://zdalny_serwer/plik.csv -O /home/plik.csv done
Tworzę zmienną rozmiar o rozmiarze pliku /home/plik.csv, następnie $rozmiar -e 0 porównuje czy rozmiar pliku jest równy zero, jeśli tak powinien się odpalić wget i zaciągnąć plik
Jak się domyślacie nie działa ale nie wiem co ;)
Nic na konsole mi nie wypluwa.
Offline
Dopisz u góry
#!/bin/bash -x
a w cronie wywołaj go przez ./skrpcik 2>&1>~/skrypcik.log
Offline
Wcześniej miałem bez -x, po dopisaniu #!/bin/bash -x wypluwa takie coś:
+ set rozmiar = 'stat -c%s /home/plik.csv' + '[' -e 0 ']'
Polecenie ./skrpcik 2>&1>~/skrypcik.log tworzy plik ale rozmiar jest 0
Offline
minio@pingwin ~ ]:-> man bash CONDITIONAL EXPRESSIONS ... -s file True if file exists and has a size greater than zero.
Poza tym, w dowolnej kolejności:
a) w bashu nie ma operatora porównawczego -e, jest za to -eq
b) pętla będzie nieskonczona, ponieważ zmienną rozmiar ustalasz przed pętlą, i w dalszych iteracjach porównujesz 0 do tego pierwotnego rozmiaru, nie aktualnego.
c) brak spacji w [$rozmiar
Ostatnio edytowany przez Minio (2009-04-09 17:40:10)
Offline
Ok poradziłem sobie, dzięki za wskazówki.
#!/bin/bash -x wget --proxy --tries=5 --waitretry=600 http://history.csv -O /home/history.csv rozmiar=`stat -c%s /home/history.csv` while [ $rozmiar -eq 0 ]; do wget --proxy --tries=5 --waitretry=600 http://history.csv -O /home/history.csv rozmiar=`stat -c%s /home/history.csv` sleep 5 done
Problem leżał w spacji pomiędzy deklaracji rozmiar = zmienna i ujęcie jej w " zamiast `
Brak spacji po while [
b) pętla będzie nieskonczona, ponieważ zmienną rozmiar ustalasz przed pętlą, i w dalszych iteracjach porównujesz 0 do tego pierwotnego rozmiaru, nie aktualnego.
Dzięki wszystkim za pomoc
Offline
#!/bin/bash rm -f /home/history.csv until [ -s /home/history.csv ]; do wget --proxy --tries=5 --waitretry=600 http://history.csv -O /home/history.csv sleep 5 done
Ale jak tam sobie wolisz.
Offline
Strony: 1