Hallo,
ich habe mal eine Frage zu Shell-Skript Programmierung.
Und zwar habe ich ein Wrapper-Skript, welches in einer while-Schleife ein anderes Skript ausführt und anschließend per sleep eine bestimmtes Zeitinterval wartet.
In dem Wrapper-Skript fange ich per trap SIGTERM ab. Dieses habe ich 2mal definiert. Einmal ausserhalb und einmal innerhalb der Schleife. Innerhalb der Schleiße wird ein break ausgeführt, damit die Schleife verlassen wird und das Skript, welches in der Schleife aufgerufen wird, läuft entweder durch oder wird erst gar nicht aufgerufen.
Allerdings ist das Zeitinterval vom sleep relativ hoch und es wird ggf. beim Senden des kill-Befehls kill -SIGTERM <PID des Wrapper-Skripts> das Sleep noch abgewartet, was ich jedoch nicht möchte.
Wie könnte ich sowas elegant lösen?
Eine do-while Schleife gibt es ja leider nicht.
Shell-Skript + trap
Shell-Skript + trap
Oh, yeah!
Re: Shell-Skript + trap
Dein Problem habe ich nicht verstanden. Aber statt "do ... while" wäre vielleicht "until" ganz nett. Keine Ahnung ob das hilft.Eine do-while Schleife gibt es ja leider nicht.
Code: Alles auswählen
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done
Re: Shell-Skript + trap
Danke. Habe mich wohl ein wenig undeutlich ausgedrückt.
Hier mal ein Beispiel, wie ich es meine (hoffe, dass es nun verständlicher ist). Von einer anderen Konsole sende per kill -15 <PID> das Signal SIGTERM, auf welches da s Skript wie folgt reagiert:
Habe in der Ausgabe mit # den Startpunkt des kill-Befehls markiert
Anhand der Zeiten sieht man, dass zuerst das sleep 20 abgewartet wird, bevor die Schleife per break verlassen wird. Da das Interval vom sleep mit 20 Sekunden auch gerne größer werden könnte, möchte ich nicht so lange abwarten müssen. Mir geht es nur darum, dass die Skripte vor dem sleep sauber beendet werden.
Hier mal ein Beispiel, wie ich es meine (hoffe, dass es nun verständlicher ist). Von einer anderen Konsole sende per kill -15 <PID> das Signal SIGTERM, auf welches da s Skript wie folgt reagiert:
Habe in der Ausgabe mit # den Startpunkt des kill-Befehls markiert
Code: Alles auswählen
daniel@daniel-tablet:~/scripts/bash$ time ./wrapper_script
PID 4340
# ab hier wurde kill-Befehl gesendet
exit program
real 0m5.008s
user 0m0.000s
sys 0m0.012s
daniel@daniel-tablet:~/scripts/bash$ time ./wrapper_script
PID 4342
start wrapper script...
# ab hier wurde kill-Befehl gesendet
exit program
real 0m10.010s
user 0m0.008s
sys 0m0.000s
daniel@daniel-tablet:~/scripts/bash$ time ./wrapper_script
PID 4345
start wrapper script...
loop, do something...
Execute script....
sleep 20
# ab hier wurde kill-Befehl gesendet
break loop
real 0m32.016s
user 0m0.008s
sys 0m0.008s
daniel@daniel-tablet:~/scripts/bash$ time ./wrapper_script
PID 4350
start wrapper script...
loop, do something...
# ab hier wurde kill-Befehl gesendet
break loop
real 0m12.013s
user 0m0.004s
sys 0m0.016s
daniel@daniel-tablet:~/scripts/bash$
Oh, yeah!