Hallo zusammen, ich moechte eine Exception in einem bash-Script abfangen und stehe gerade auf dem Schlauch. Mit "curl" sende ich eine Nachricht (wenn es Input gibt) an ein anderes System. Solange das System erreichbar ist, ist die Welt in Ordnung. Ist das System nicht erreichbar, steigt das Script aus mit "curl: (7) couldn't connect to host" Jegliche while-loops oder trap * brachten bisher keinen Erfolg. Ich moechte erreichen, dass das Script nicht stirbt, sondern nach "sleep 5" beim naechsten Input wieder versucht die aktuelle Nachricht zu senden. Ist das per bash ueberhaupt moeglich? MfG Th. Moritz --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo Thomas, hallo Leute, Am Montag, 22. Oktober 2007 schrieb Thomas Moritz:
ich moechte eine Exception in einem bash-Script abfangen und stehe gerade auf dem Schlauch. [...] Ich moechte erreichen, dass das Script nicht stirbt, sondern nach "sleep 5" beim naechsten Input wieder versucht die aktuelle Nachricht zu senden. Ist das per bash ueberhaupt moeglich?
Wenn das aufgerufene Programm/Script nicht gerade "kill $PPID" macht, würde ich das sogar für ein übliches Verhalten halten ;-) Eigentlich[tm] ist es also komisch, dass Dein Script gekillt wird. Mangels Kristallkugel: Zeigst Du das Script mal? Gruß Christian Boltz -- Super-PC von IBM - der erste 486er im Test [Titelseite der Chip 8/1989] --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo Thomas, hoi Christian, lang nicht gelesen... On Mon, 22 Oct 2007, Christian Boltz wrote:
Am Montag, 22. Oktober 2007 schrieb Thomas Moritz:
ich moechte eine Exception in einem bash-Script abfangen und stehe gerade auf dem Schlauch.
"Exception" hört sich nach 'trap' an...
[...]
Ich moechte erreichen, dass das Script nicht stirbt, sondern
Stirbt es denn überhaupt? Oder beendet es sich nur korrekt?
nach "sleep 5" beim naechsten Input wieder versucht die aktuelle Nachricht zu senden. Ist das per bash ueberhaupt moeglich?
Wenn das aufgerufene Programm/Script nicht gerade "kill $PPID" macht, würde ich das sogar für ein übliches Verhalten halten ;-) Eigentlich[tm] ist es also komisch, dass Dein Script gekillt wird.
Ack. Solange 'curl' mit Exitcode 0 aussteigt hilft wohl nur stdout/stderr zu parsen und darauf dann zu reagieren. Schema: while ! curl ... 2>&1 | grep -q bla; do sleep 5 done Ich verwende hier in meinen Scripten lieber wget, das "bedient" sich irgendwie handlicher und liefert meistens auch einen passenden Exitcode. Außer bei redirects, aber das kann man wget kaum vorwerfen, da es da auch nur ein '200' bekommt...
Mangels Kristallkugel: Zeigst Du das Script mal?
Genau! Herzeigen! ;) -dnh -- Multidimensionale Ordnung sieht fuer den einfach gestrickten Betrachter halt meistens wie Chaos aus, weil er die Ordnung nicht erfassen kann. -- Juergen P. Meier --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Montag, 22. Oktober 2007 23:11:51 schrieb Christian Boltz: Hallo Christian, hallo Leute,
Ich moechte erreichen, dass das Script nicht stirbt, sondern nach "sleep 5" beim naechsten Input wieder versucht die aktuelle Nachricht zu senden. Ist das per bash ueberhaupt moeglich?
Wenn das aufgerufene Programm/Script nicht gerade "kill $PPID" macht, würde ich das sogar für ein übliches Verhalten halten ;-) Eigentlich[tm] ist es also komisch, dass Dein Script gekillt wird.
Mangels Kristallkugel: Zeigst Du das Script mal?
Na gut, nicht _das_ Script, aber ein simples Beispiel :-) Ist zwar ein bloedes Beispiel, aber steigt so aus, wie mein wirkliches Script. ( und nein, es liegt hier nicht an while true ) #!/bin/bash set -e while true do curl "http://192.168.1.1/control/message?nmsg=xyz" #> /dev/null 2>&1 echo "bin noch da" #^ for testing only sleep 5 done echo "Schleife beendet" Gibt es _keine_ Verbindung zum Host, dann Ausstieg mit: curl: (7) couldn't connect to host Es wird nicht die Schleife verlassen, sondern das Script stirbt, denn "Schleife beendet" bekommst Du nicht zu sehen. Ich hatte schon mit dem Gedanken gespielt, den Kram ueber die crontab zu regeln. Gibt es fuer das Script eine PID, dann OK, ansonsten Script neu starten. Lieber waere mir natuerlich eine andere Loesung. MfG Th. Moritz --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
On Tue, 23 Oct 2007, 17:04:33 +0200, Thomas Moritz wrote:
[...] ( und nein, es liegt hier nicht an while true )
#!/bin/bash
set -e
Hmm, das hatte ich mir schon gedacht... Folgendes sagt "help set" dazu: -e Exit immediately if a command exits with a non-zero status. Mach' das mal 'raus ;-) HTH, cheers. l8er manfred --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Dienstag, 23. Oktober 2007 17:26:12 schrieb Manfred Hollstein: Hallo Manfred,
On Tue, 23 Oct 2007, 17:04:33 +0200, Thomas Moritz wrote:
[...] ( und nein, es liegt hier nicht an while true )
#!/bin/bash
set -e
Hmm, das hatte ich mir schon gedacht... Folgendes sagt "help set" dazu:
-e Exit immediately if a command exits with a non-zero status.
Mach' das mal 'raus ;-)
Du bist ein Held! Danke vielmals. Nach den ersten Tests mit -xv schreibe ich schon aus Gewohnheit immer das -e rein, um Fehler zu finden :-( In diesem Fall habe ich mir damit selbst ein Kind gemacht. MfG Th. Moritz --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
participants (4)
-
Christian Boltz
-
David Haller
-
Manfred Hollstein
-
Thomas Moritz