[+] Skrypt w bashu z użyciem wget, przerwanie dzia

Potrzebujesz pomocy z C, C++, perl, python, itp.
michal881
Posty: 87
Rejestracja: 09 września 2008, 18:02
Lokalizacja: sid/lenny

[+] Skrypt w bashu z użyciem wget, przerwanie działania przy błędzie 403

Post autor: michal881 »

Dzień dobry. Napisałem skrypt mający na celu pobieranie różnych plików z pewnego serwera. Problem polega na tym, że czasem dostęp do niego jest zastrzegany:

Kod: Zaznacz cały

żądanie HTTP wysłano, oczekiwanie na odpowiedź... 403 Forbidden
Na jakiś czas co wprowadza wiele zamieszania w mój programistyczny plan. Gdy serwer staje się zastrzeżony skrypt dalej działa naliczając ściągnięte pozycje i mam problem z wprowadzeniem mechanizmu kończącego działanie tak, aby w pliku wiadomość była prawdziwa ilość pobranych pozycji. Skrypt uproszczony. Pytanie jest takie, co dodać do tego skryptu, aby można było przerwać jego działanie przy błędzie 403. Proszę spojrzeć:

Kod: Zaznacz cały

#!/bin/bash 

for ((i=1; i<100; i++))
do 
wget  zmienny_URL
echo " Pobrano $i pozycji." > wiadomosc 
done
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Może uda Ci się to załatwić liczbą prób:

Kod: Zaznacz cały

-t liczba
--tries=liczba
           Ustawia liczbę ponawiania prób na liczbę.  Dla nieskończonego ponawiania podajemy 0 lub inf.
michal881
Posty: 87
Rejestracja: 09 września 2008, 18:02
Lokalizacja: sid/lenny

Post autor: michal881 »

No tak ale to się odnosi do pojedynczego użycia wget. Jeśli mamy pętlę to nie ma to wpływu. Wget dojdzie do granicy liczby prób, poleci kolejna procedura i naliczy mi się kolejny pobrany plik i od nowa.
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Rozumiem. Może wypróbuj curl.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Wydaje mi się, że w momencie gdy wget kończy działanie z niepowodzeniem (404) to zwraca powłoce kod błędu $1. Obsłuż, że jeśli kod błędu == $1 to skrypt kończy działanie (exit).
michal881
Posty: 87
Rejestracja: 09 września 2008, 18:02
Lokalizacja: sid/lenny

Post autor: michal881 »

A jakby to wyglądało w kodzie?
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Mniejwięcej tak:

Kod: Zaznacz cały


#!/bin/bash 

for ((i=1; i<100; i++))
do 
wget  zmienny_URL
 if [ $? -eq 0 ]; then
  echo " Pobrano $i pozycji." > wiadomosc 
 else
  echo " Wystąpił błąd. Najprawdopodobniej adres nie istnieje. Kończę działanie" > wiadomosc
  exit 1
 fi
done






michal881
Posty: 87
Rejestracja: 09 września 2008, 18:02
Lokalizacja: sid/lenny

Post autor: michal881 »

Dzięki, działa :)
ODPOWIEDZ