Checken ob sh-script schon läuft

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Checken ob sh-script schon läuft

Beitrag von Kermit24 » 20.07.2008 13:11:06

Hallo,
hat jemand oder weiß jemand, wo es ein fertiges Scriptteil gibt, welche prüft, ob das aktuelle Script bereits läuft (es soll nicht zweimal ausgeführt werden können!).

Ich habe diesen Ansatz gefunden, mit den man prüfen kann, ob ein bestimmter Prozess schon läuft:

Code: Alles auswählen

#!/bin/sh
SERVICE='script.sh'

if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
    echo "$SERVICE service running"
else
    echo "$SERVICE is not running"
fi
Problem ist, dass das script sich ja selbst checken soll und beim Checken immer schon läuft! Das Script müsste also checken, ob zwei gleichnamige Prozesse laufen oder die eigene PID beim Check ausschließen. Hat jemand sowas schon?

Danke im voraus,
Kermit

PS: ich möchte nicht mit Lock-Files arbeiten

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Checken ob sh-script schon läuft

Beitrag von cosmac » 20.07.2008 13:47:45

hi,

pidof kennt eine Option genau für den Zweck.
Das Script muss dann so anfangen:

Code: Alles auswählen

#!/bin/sh

pidof -x -o %PPID $(basename $0) && exit
$(basename $0) liefert den Namen des gerade laufenden Scripts.
Beware of programmers who carry screwdrivers.

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Re: Checken ob sh-script schon läuft

Beitrag von godsmacker » 20.07.2008 14:00:28

Eventuell robuster koennte wohl ein pidfile sein. Dabei schreibst Dein Programm beim Starten seine Prozess ID in ein file. Um dann herauszufinden ob das Programm laeuft kann man die id aus diesem file auslesen und versuchen den zugehoerigen Prozess zu kontaktieren, zum Beispiel indem man ein Signal an ihn sendet. Das Signal 0 ist dafuer am geeignetsten, da es lediglich ueberprueft ob ein anderes Signal gesendet werden kann. Falls

Code: Alles auswählen

kill -0 $pid
einen Rueckgabewert != 0 liefert, dann laeuft der Prozess entweder nicht, oder man hat keine Rechte ihm Signale zu schicken.

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Checken ob sh-script schon läuft

Beitrag von Kermit24 » 20.07.2008 15:14:35

@cosmac: Danke! Werde ich gleich ausprobieren
@godsmacker: Nein, ein pid-file will ich gerade nicht. Bei einen Absturz bleibt das Pidfile vorhanden. Die PID darin kann dann auch ein anderer Prozess haben, den man ein 0-Signal schickt...

Benutzeravatar
Sid Burn
Beiträge: 47
Registriert: 16.11.2006 15:18:02
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /universe/earth/europe/germany/nrw/essen
Kontaktdaten:

Re: Checken ob sh-script schon läuft

Beitrag von Sid Burn » 20.07.2008 17:00:11

Kermit24 hat geschrieben: @godsmacker: Nein, ein pid-file will ich gerade nicht. Bei einen Absturz bleibt das Pidfile vorhanden. Die PID darin kann dann auch ein anderer Prozess haben, den man ein 0-Signal schickt...
Doch du willst eine PIDFile, du musst es nur richtig machen. ;)

Als erstes checkst du generell erstmal ob überhaupt noch ein Prozess mit dieser PID läuft. Wenn dies nicht der Fall ist, dann ist dein PC währenddessen Abgestürzt.

Ist sie vorhanden dann musst du natürlich noch überprüfen ob dieser Prozess mit dieser PID auch dein Programm ist. Wenn dies nicht dein Programm ist, dann weißt du ebenfalls das dein PC abgesürzt ist.

PID Files werden genau für diesen Zweck bei alles Daemons genutzt. Ich bezweifle das man ~20 Jahre lang PID FIles genutzt hat und du der erste bist der auf die Idee kommt das der PC auch abstürzen könnte.

Ansonsten gibt es dafür unter Debian auch das Programm "start-stop-daemon". Dieser ist extra dafür gedacht genau die Aufgabe zu erfüllen die du möchtest.

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Checken ob sh-script schon läuft

Beitrag von Kermit24 » 20.07.2008 19:25:38

Nein, ich weiß genau, was ich möchte und was ich nicht möchte!
Sid Burn hat geschrieben: Ist sie vorhanden dann musst du natürlich noch überprüfen ob dieser Prozess mit dieser PID auch dein Programm ist. Wenn dies nicht dein Programm ist, dann weißt du ebenfalls das dein PC abgesürzt ist.
Wofür brauche ich dann überhaupt noch ein pid-file, wenn ich eh wieder alles überprüfen muss? Ich sehe da keinen entscheidenen Vorteil zu dem Einzeiler von cosmac. Denn als Einzeiler kriege ich diesen ganzen Überprüfungs- und Dateiverwaltungsaufwand kaum hin! Für ein Script, dass sonst nur aus drei Zeilen besteht absolut overkill!
Du denkst wahrscheinlich eher an mächtige Daemon-Dienste (welcher meist eh als binary genutzt wird) und nicht an ein einfaches Script, dass überschaubar bleiben soll.

Antworten