shell-script "wget" Error bei timeout

Antworten
Nachricht
Autor
Becks

shell-script "wget" Error bei timeout

#1 Beitrag von Becks » 21. Mär 2007 12:57

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):

Code: Alles auswählen

date=`date '+%F'`

#Homepage - Events today - workshops (NewsindexTeaser)
URL1="http://xxx.xxx.de/tools/export.py?fid=14&date=$date&days=1&event=conference&of=xml"
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:

Code: Alles auswählen

--11:10:11--  http://xxx.xxx.de/tools/export.py?fid=14&date=2007-03-21&days=365&event=conference&of=xml
  (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 ;)

Hoffe mir kann einer helfen!

Greeetz Basti

komsomolze
Beiträge: 430
Registriert: 03. Mär 2006 23:16

#2 Beitrag von komsomolze » 22. Mär 2007 8:56

Hallo,

wenn Du die Option '-O news1.xml' weglässt, und stattdessen '-N (--timestamping)' benutzt?

Du könntest Dir auch mal das Skript update-pciids ansehen, da wird der Download in einen Test eingebunden:

Code: Alles auswählen

...
	DL="wget -O $DEST.new $SRC"
...
if ! $DL ; then
	echo >&2 "update-pciids: download failed"
	rm -f $DEST.new
	exit 1
fi
...
mfg komsomolze

Becks

#3 Beitrag von Becks » 23. Mär 2007 15:28

Habe es nun wie folgt gelöst:

Code: Alles auswählen

#!/bin/sh

cd /afs/...

date=`date '+%F'`

#Connection check
URL_check="http://xxx.xxx.de/tools/export.py?fid=14&date=$date&days=1&event=conference&of=xml"
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=14&date=$date&days=1&event=conference&of=xml"
	wget -O news1.xml "$URL1"

	#Homepage - Events today - seminars (NewsindexTeaser)
	URL2="http://xxx.xxx.de/tools/export.py?fid=14&date=$date&days=1&event=simple_event&of=xml"
	wget -O news2.xml "$URL2"

	#Homepage - Upcoming Seminars (NewsindexTeaser2)
	URL3="http://xxx.xxx.de/tools/export.py?fid=14&date=$date&days=12&event=simple_event&of=xml"
	wget -O news3.xml "$URL3"

....

fi

Antworten