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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2009-04-09 14:51:44

  bns - unknown

bns
unknown
Zarejestrowany: 2005-12-25
Serwis

Bash: prosty skrypt sprawdzający wielkość pliku i pobierający dane

Mam skrypcik odpalony w cronie, który pobiera codziennie o 8:00 plik .csv

Kod:

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ć ;)

Kod:

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.


Pozdrawiam,
bns

Offline

 

#2  2009-04-09 14:59:32

  lis6502 - Łowca lamerów

lis6502
Łowca lamerów
Skąd: Stalinogród
Zarejestrowany: 2008-12-04

Re: Bash: prosty skrypt sprawdzający wielkość pliku i pobierający dane

Dopisz u góry
#!/bin/bash -x
a w cronie wywołaj go przez ./skrpcik 2>&1>~/skrypcik.log

Offline

 

#3  2009-04-09 15:06:18

  bns - unknown

bns
unknown
Zarejestrowany: 2005-12-25
Serwis

Re: Bash: prosty skrypt sprawdzający wielkość pliku i pobierający dane

Wcześniej miałem bez -x, po dopisaniu #!/bin/bash -x wypluwa takie coś:

Kod:

+ set rozmiar = 'stat -c%s /home/plik.csv'
+ '[' -e 0 ']'

Polecenie ./skrpcik 2>&1>~/skrypcik.log tworzy plik ale rozmiar jest 0


Pozdrawiam,
bns

Offline

 

#4  2009-04-09 17:27:10

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: Bash: prosty skrypt sprawdzający wielkość pliku i pobierający dane

Kod:

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

 

#5  2009-04-09 18:44:08

  bns - unknown

bns
unknown
Zarejestrowany: 2005-12-25
Serwis

Re: Bash: prosty skrypt sprawdzający wielkość pliku i pobierający dane

Ok poradziłem sobie, dzięki za wskazówki.

Kod:

#!/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


Pozdrawiam,
bns

Offline

 

#6  2009-04-09 19:03:01

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: Bash: prosty skrypt sprawdzający wielkość pliku i pobierający dane

Kod:

#!/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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)