Prüfen ob Skript läuft, PID File in /var/run

Hobbystern

Hobbystern

Wahl-Debianer
Hallo Gemeinde,

ich habe ein "KeepAlive" Skript, dessen ganze Aufgabe es ist ein Programm immer am Leben zu erhalten.

Ich habe nunmehr ein Pidfile mit "touch" angelegt, welches dann existiert, wenn das Skript läuft - so sollte es nie doppelt laufen.

Was passiert eigentlich wenn das Skript abgebrochen wird und keine zeit mehr hat das PID File zu löschen - wie kann ich es geschickt umgehen das es nicht passiert, das das Skript nicht mehr startet weil ein "totes" PIDFile existiert..?

Code:
...
SAFE_PID=/var/run/safe_asterisk.pid             # Unsere PID
PIDNUTZEN=yes

if [ -e ${SAFE_PID} ]; then
        if [ ${PIDNUTZEN} == "yes" };then
                # Start verweigern...
                echo "${SAFE_PID} EXISTIERT!! Safe_Asterisk wird anscheinend doppelt ausgefuehrt!! START VERWEIGERT!!"
                exit 0
        else
                #Start erlauben
                echo "${SAFE_PID} EXISTIERT!! Safe_Asterisk wird anscheinend doppelt ausgefuehrt!! Starte trotzdem...
        fi
else
        touch ${SAFE_PID}
fi

Ich denke da an einen Reset des Rechners (aua) oder sonstwas...

Dank für Eure Hilfe!
Stefan
 
Ein recht verbreiteter Weg ist es, die Prozess-ID zu speichern. Sollte Deine PID Datei existieren kannst Du aus ihr die Prozess-ID auslesen und dann testen, ob der Prozess noch läuft.


Gruß,

Lord Kefir
 
Hi Kefir,

ich habe das hier so gefunden (Google)

Code:
if { [ file exists /var/run/app.pid ] == 1 } {
    if {  [ catch { exec ps h [ exec cat /var/run/app.pid ] } ] == 0 } {
        # APP Process is already running, exit
        puts "APP process is already running"
        exit
    } else {
        # Remove old pid file, create new pid file
        exec rm /var/run/app.pid
        exec echo [ pid ] >  /var/run/app.pid
    }
} else {
    # create new pid file
    exec echo [ pid ] > /var/run/app.pid
}

Woher nehme ich die pid wenn ich doch nun (wenigstens am Anfang) doppelt existiere - mache ich das mit grep etc finde ich mich selber ...
Denkfehler?! Ich glaube schon, die pid darf ich halt erst speichern wenn ich geprüft habe das sie nicht die richtige ist - und suchen müsste ich nach der pid und nicht nach dem prozessnamen, richtig?

LG Stefan
 

Ähnliche Themen

HandbrakeCLI Shell Skript

[Erledigt] Shell-Skript lässt sich nicht mit Cron ausführen

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Autostart von X mit google-chrome durch systemd

Queue für copy Script

Zurück
Oben