Skript soll nicht doppelt laufen... kill pkill pid cron

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.

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.
 

Du kannst auch ein Programm anhand eines Prozessnamens schließen:​


Bash:
#!/bin/bash

xed & PID=$! # Start XED and get PID

sleep 2

kill -15 $PID # Soft Kill
echo
echo

sleep 2

if ps -p $PID
    then
        echo The PID/program didnt be killed successfull by Soft Kill active
        kill -9 $PID # Hard Kill
    else
        echo PID/programm are already closed by Soft Kill

fi
echo
echo
read -p
 

bash Script per exit beenden​


Bash:
main.sh
#!/bin/bash

sleep 5

exit # Script beenden

read -p "Zum Beenden Enter drücken oder Ctl + C"
 

PID von Programm ermitteln​


Firefox öffnen und PID von zuletzt geöffneten Programm ermitteln:
Bash:
firefox & echo $!
 

pid an Hand von Prozeßnamen ermitteln​


Erste pid von folgender Ausgabe geht für kill
Bash:
Erste pid von folgender Ausgabe geht für kill
pgrep -f firefox
Die erste pid der folgenden Ausgabe geht nicht für kill
pidof -x firefox

Die erste pid der folgenden Ausgabe geht nicht für kill
Bash:
Die erste pid der folgenden Ausgabe geht nicht für kill
pidof -x firefox
 

Programm anhand von PID versuchen weich zu schließen​


Bash:
kill -15 PID



Prüfen ob ein Programm mit einer bestimmten PID noch läuft​


Code:
kill -0 $PID checks whether it's still running.


Programm anhand von PID versuchen hart zu schließen​


Code:
kill -9 PID
 

Programm per per Programmname ermittelter pid schließen​


Code:
p=$(pidof firefox)
kill -9 $p
 

Ähnliche Themen

Shell-Skript nicht doppelt starten

Shellskript - Fehler in Cron

Bash Script, Log ausgabe friert ein.

Prozesse Killen

Zurück
Oben