P
Programmer78
Doppel-As
Hallo zusammen,
per cron möchte ich ein bash-Skript einfach stündlich (neu)starten. Da das Bash-Skript eine while true Schleife enthält und es daher endlos läuft und im Hintergrund geschickt wurde, soll der Vorläufer bei der nächsten cron-Fälligkeit per kill oder pkill beendet werden, funktioniert bei mir aber nicht.
Mit vorherigem export der pid in eine Datei oder einfaches parsen aus der Prozessliste mit ps aux | grep Skriptname | grep -v grep bekomme ich zwar die PID, aber diese kann ich nicht beenden.
Weder kill $pid, kill -9 $pid oder kill -l 15 $pid funktionieren. "kill" führt den Befehl zwar aus und kill gibt aus, der Prozess mit der PID sei tatsächlich beendet, ist er aber nicht. Per ps aux oder mit htop ist der Prozess immer noch sichtbar und läuft auch noch.
Habe jetzt gesehen, dass die PID um -1 versetzt sein kann, wenn man pipes im Skript verwendet hat.
Wie macht man das richtig? Wie beende ich obiges Skript mit allen Kindprozessen?
Ausführung per cron:
sh testscript.sh
sh testscript.sh
Altes Skript soll beendet werden, die neue Instanz gestartet werden.
Brauche hier einen Denkanstoß, danke.
Gruß
P.
per cron möchte ich ein bash-Skript einfach stündlich (neu)starten. Da das Bash-Skript eine while true Schleife enthält und es daher endlos läuft und im Hintergrund geschickt wurde, soll der Vorläufer bei der nächsten cron-Fälligkeit per kill oder pkill beendet werden, funktioniert bei mir aber nicht.
Mit vorherigem export der pid in eine Datei oder einfaches parsen aus der Prozessliste mit ps aux | grep Skriptname | grep -v grep bekomme ich zwar die PID, aber diese kann ich nicht beenden.
Weder kill $pid, kill -9 $pid oder kill -l 15 $pid funktionieren. "kill" führt den Befehl zwar aus und kill gibt aus, der Prozess mit der PID sei tatsächlich beendet, ist er aber nicht. Per ps aux oder mit htop ist der Prozess immer noch sichtbar und läuft auch noch.
Habe jetzt gesehen, dass die PID um -1 versetzt sein kann, wenn man pipes im Skript verwendet hat.
Code:
cat testscript.sh
#! /bin/bash
echo $$
while true; do
printf "Script läuft noch.. PID $$\n"
sleep 20
done &
Wie macht man das richtig? Wie beende ich obiges Skript mit allen Kindprozessen?
Ausführung per cron:
sh testscript.sh
sh testscript.sh
Altes Skript soll beendet werden, die neue Instanz gestartet werden.
Brauche hier einen Denkanstoß, danke.
Gruß
P.