PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : script soll prüfen ob eine instanz von sich selbst bereits läuft?!



meinereinerseiner
10-04-2003, 21:54
hi,

steh mal wieder vor einer frage.

habe ein script namens poing.sh, welches nur 1x laufen soll und welches
per cron alle 5 minuten rennt, nun kommt es vor, das das proggi mal etwas länger braucht und der cron die 2 instanz startet. wie kann ich das denn unterbinden.

ich kann ja nun kein

if [ ps | grep poing.sh | grep -v grep ]; then
exit 0
fi

machen, weil dann findet er ja sich selbst und die evtl. vorhandene 2. instanz.
man könnt es mit lock files machen - aber vielleicht gehts ja noch eleganter?


der tom

spike
11-04-2003, 06:44
Hallo Tom.,

ich würde mir Anstelle von den gefundenen Prozessen die PIDS mal anschauen:

Du kannst ja die Pid des laufenden Programms mit der Variable $$ ermitteln

MY_PID=$$

for PID in $(ps -efa | grep poing.sh | awk '{print $2}' ; do
if [ $MY_PID -ne ${PID} ]
echo "Programm läuft noch"
exit 0
fi

also müsstest Du nur abfragen ob ausser dem Prozess noch andere da sind.

Noch einfacher aber auch nicht ganz so elegant geht es natürlich auch, wenn Du die Anzahl der gefunden Prozesse zählst: Das dürfte ja immer nur einer sein, nämlich er selbst. Sobald die Anzahl grösser ist kannst Du dann in Schönheit sterben (exit 0)


if [ $(ps -efa | grep poing.sh | grep -v grep | wc -l) -gt 1 ] ; then
echo "Programm läuft noch"
exit 0
fi

Wenn ich so darüber nachdenke ist Variante 2 eigentlich völlig ausreichend.

Grüße, spike