shell-script 'wget' Error bei timeout
(Autor: B e с k ѕ, Frage gestellt am Fr, 23. Mär 2007)
Hi all!
Ich habe ein kleines shellscript dass via cronjob regelmäßig durchläuft.
in dem Script werden ganz simpel mit wget einige Seiten aufgerufen, die dann lokal gespeichert werden.
Sieht beispielsweise so aus (URL geändert):
Funktioniert auch klasse. Er überschreibt bei jedem Durchlauf die file. Allerdings kam es in letzter Zeit leider vor, dass der Server auf dem die Seite aufgerufen wird down war.
wget versucht es dann standard mäßig 20mal
Beispiel output:
Er bekommt 20x mal nen Read error und sagt dann "Giving up". Dann überschreibt er jedoch leider die file mit leerem Inhalt!
Ich suche eine unless-abfrage. Also irgendsowas am Anfang "unless output=ERROR"
so dass er das script nur durchläuft wenn der Server erreichbar ist. Wenn nicht soll er die files im alten Zustand lassen - besser alte Infos als gar keine Wink
Hoffe mir kann einer helfen!
Greeetz Basti
Ich habe ein kleines shellscript dass via cronjob regelmäßig durchläuft.
in dem Script werden ganz simpel mit wget einige Seiten aufgerufen, die dann lokal gespeichert werden.
Sieht beispielsweise so aus (URL geändert):
date=`date '+%F'` #Homepage - Events today - workshops (NewsindexTeaser) URL1="http://xxx.xxx.de/tools/export.py?fid..." wget -O news1.xml "$URL1"
Funktioniert auch klasse. Er überschreibt bei jedem Durchlauf die file. Allerdings kam es in letzter Zeit leider vor, dass der Server auf dem die Seite aufgerufen wird down war.
wget versucht es dann standard mäßig 20mal
Beispiel output:
--11:10:11-- http://xxx.xxx.de/tools/export.py?fid... (try:12) => `news6.xml' Connecting to xxx.xxx.de[xxx.xxx.5.58]:80... connected. HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers. Retrying.
Er bekommt 20x mal nen Read error und sagt dann "Giving up". Dann überschreibt er jedoch leider die file mit leerem Inhalt!
Ich suche eine unless-abfrage. Also irgendsowas am Anfang "unless output=ERROR"
so dass er das script nur durchläuft wenn der Server erreichbar ist. Wenn nicht soll er die files im alten Zustand lassen - besser alte Infos als gar keine Wink
Hoffe mir kann einer helfen!
Greeetz Basti
Artikelbaum anzeigen
Re: shell-script 'wget' Error bei timeout
(Autor: Е r w i n R о c k e n b а u e r, Antwort nach 24 Min)
hi Basti
1. wget in eine temporäre datei
2. $ERR = `grep ERROR $temp | wc -l`
3. if [ $ERR -eq 0 ] ...
4. cp $temp $xml
alles klar?
lg
erwin
1. wget in eine temporäre datei
2. $ERR = `grep ERROR $temp | wc -l`
3. if [ $ERR -eq 0 ] ...
4. cp $temp $xml
alles klar?
lg
erwin
Re^2: shell-script 'wget' Error bei timeout
(Autor: P H ν L, Antwort nach 3 h, 40 Min)
Hallo,
Statt dem Variablen-Hin-und-Her kann man unter der Bash auch einfach ergebnisabhängige Befehlsausführung verwenden:
Befehl2 wird nur ausgeführt, wenn Befehl1 keinen Fehler (d.i. Fehlercode = 0) liefert.
--
Philipp
1. wget in eine temporäre datei
2. $ERR = `grep ERROR $temp | wc -l`
3. if [ $ERR -eq 0 ] ...
4. cp $temp $xml
wäre es nicht besser den Fehlercode (Errorlevel) von wget zu prüfen? Denn so darf die heruntergeladene Datei die Zeichenfolge ERROR nicht enthalten.2. $ERR = `grep ERROR $temp | wc -l`
3. if [ $ERR -eq 0 ] ...
4. cp $temp $xml
Statt dem Variablen-Hin-und-Her kann man unter der Bash auch einfach ergebnisabhängige Befehlsausführung verwenden:
Befehl1 && Befehl2
Befehl2 wird nur ausgeführt, wenn Befehl1 keinen Fehler (d.i. Fehlercode = 0) liefert.
--
Philipp
Re^3: shell-script 'wget' Error bei timeout
(Autor: Е r w і n R o с k e n b a u е r, Antwort nach 4 h, 17 Min)
hi Philipp
natürlich ist es besser, den fehlercode zu verwenden. fragt sich nur, ob wget immer einen fehlercode liefert. ich habe bei wget immer wieder das problem, dass der http-aufruf an sich funktioniert hat, der web-server aber müll geliefert hat. damit hätte wget keinen fehlercode geliefert. ich prüfe daher immer den inhalt der datei und ignoriere den fehlercode. nicht ganz sauber aber funktioniert.
und ja, natürlich kann man den ganzen code auf eine zeile komprimieren. das verbessert aber die lesbarkeit des codes. und wenn man ein paar monte später vielleicht mal was ausbessern will, zahlt sich dass bisschen tipparbeit schon aus.
lg
erwin
natürlich ist es besser, den fehlercode zu verwenden. fragt sich nur, ob wget immer einen fehlercode liefert. ich habe bei wget immer wieder das problem, dass der http-aufruf an sich funktioniert hat, der web-server aber müll geliefert hat. damit hätte wget keinen fehlercode geliefert. ich prüfe daher immer den inhalt der datei und ignoriere den fehlercode. nicht ganz sauber aber funktioniert.
und ja, natürlich kann man den ganzen code auf eine zeile komprimieren. das verbessert aber die lesbarkeit des codes. und wenn man ein paar monte später vielleicht mal was ausbessern will, zahlt sich dass bisschen tipparbeit schon aus.
lg
erwin
Re^4: shell-script 'wget' Error bei timeout
(Autor: Ρ Н ν L, Antwort nach 5 h, 37 Min)
Hallo,
Eine bessere Prüfung, kann die Tipparbeit wert sein, aber dazu muss sie erstmal tatsächlich besser sein.
--
Philipp
natürlich ist es besser, den fehlercode zu verwenden. fragt
sich nur, ob wget immer einen fehlercode liefert. ich habe bei
wget immer wieder das problem, dass der http-aufruf an sich
funktioniert hat, der web-server aber müll geliefert hat.
damit hätte wget keinen fehlercode geliefert. ich prüfe daher
immer den inhalt der datei und ignoriere den fehlercode.
dann solltest du aber den Inhalt der Datei tatsächlich prüfen. Von einem Fehler auszugehen, wenn ein einziges Wort, das auch in der Fehlermeldung vorkommt, in der Ausgabe auftaucht, ist nicht sonderlich sinnvoll.sich nur, ob wget immer einen fehlercode liefert. ich habe bei
wget immer wieder das problem, dass der http-aufruf an sich
funktioniert hat, der web-server aber müll geliefert hat.
damit hätte wget keinen fehlercode geliefert. ich prüfe daher
immer den inhalt der datei und ignoriere den fehlercode.
nicht ganz sauber aber funktioniert.
Dein Code würde tatsächlich nicht funktionieren, da im Fehlerfalle die heruntergeladene Datei i.d.R. schlicht leer sein wird (siehe entsprechenden Hinweis des OP), also auch kein ERROR enthalten wird. Es würden aber sehr wohl legitime Dateien verworfen, deren Download geklappt hat.
und ja, natürlich kann man den ganzen code auf eine zeile
komprimieren. das verbessert aber die lesbarkeit des codes.
Die von mir vorgeschlagene Variante enthält sowenig Programm-Logik, dass sie durch eine einzige Zeile nicht übertrieben komprimiert ist.komprimieren. das verbessert aber die lesbarkeit des codes.
Eine bessere Prüfung, kann die Tipparbeit wert sein, aber dazu muss sie erstmal tatsächlich besser sein.
--
Philipp
Re^2: shell-script 'wget' Error bei timeout
(Autor: B е c k ѕ, Antwort nach 4 h, 13 Min)
Danke, dein Ansatz war Hilfreich ;)
So siehts nun aus:
So siehts nun aus:
#!/bin/sh cd /afs/... date=`date '+%F'` #Connection check URL_check="http://xxx.xxx.de/tools/export.py?fid..." wget -t 1 -O check.xml "$URL_check" -o check.log #Ausführen nur wenn kein 'ERROR' oder 'Giving up' in check.log gefunden wird err=`grep -i 'Giving up' check.log | wc -l` err2=`grep -i ERROR check.log | wc -l` if [ $err == 0 ] && [ $err2 == 0 ]; then #Homepage - Events today - workshops (NewsindexTeaser) URL1="http://xxx.xxx.de/tools/export.py?fid..." wget -O news1.xml "$URL1" #Homepage - Events today - seminars (NewsindexTeaser) URL2="http://xxx.xxx.de/tools/export.py?fid..." wget -O news2.xml "$URL2" #Homepage - Upcoming Seminars (NewsindexTeaser2) URL3="http://xxx.xxx.de/tools/export.py?fid..." wget -O news3.xml "$URL3" .... fi
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Du kannst auf diesen Artikel nicht antworten.
Dieser Artikelbaum ist im Archiv des Experten-Forums von wer-weiss-was zum Thema "Programmierung allgemein" archiviert. Es handelt sich um keine aktuelle Diskussion, daher kann auf die Artikel nicht mehr geantwortet werden.
Folgende Artikel könnten Dich auch interessieren:
Daten an ein Formular übergeben IIProblem mit der system() funktion
.Net 2.0 Codesicherheit einstellen
Kein klartext Passwort in ShellScript
gibts free domain server mit cgi-bin unterstützng?
cgi-bin möglichkeit auf free domain???
probleme mit cgi script- braucht das cgi-bin?
Kommentar script
Tomcat - HTTP status 404
Datum ändern
Apache arbeitet php-files nicht ab ?
MySQL-Zugriff über php vom fremden Server
vorheriger Artikelbaum
(Tipps zum Programmieren??)
(Gegenteil von webbasiert?)
nächster Artikelbaum















