PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : doppelten aufruf eines scriptes verhindern?



meinereinerseiner
22-07-2005, 13:34
hi,

ich mal wieder.
würde gern verhindern, das ein script welches via cron gestartet wird
doppelt läuft, falls es mal wieder etwas länger dauert.

hatte mir das so gedacht:


if [ "$(pgrep -f $0 | grep -v $$)" == "" ]; then
echo "starte verarbeitung"
else
echo "Andere Instanz ist noch aktiv!"
exit 1
fi


aber das geht irgendwie nicht, der bricht immer ab.
wo ist da mein denkfehler, oder gehts sogar noch einfacher?

thx
der tom

peschmae
22-07-2005, 20:18
Ich sehe auch nicht wieso das nicht geht. Vor allem wenn ich das mit einem ähnlichen Beispiel probiere funktionierts bei mir. Etwas merkwürdig das.

btw:
if [ "$(pgrep -f $0 | grep -v $$)" == "" ]; then
kannst du auch als
if [ -z "$(pgrep -f $0 | grep -v $$)" ]; then
schreiben :)

MfG Peschmä

michael.sprick
22-07-2005, 21:19
so wird ein Schuh draus:



pid=$$
if [ "$(pgrep -f $0 | grep -v ${pid})" ]; then
echo "starte verarbeitung"
else
echo "Andere Instanz ist noch aktiv!"
exit 1
fi

Kann es sein, dass in $$ nicht die PID des Skriptes steht, sondern die der Subshell, die durch $() erzeugt wird?

RapidMax
23-07-2005, 21:21
Würde auch über lockfiles klappen.

Gruss, Andy

peschmae
24-07-2005, 10:27
Aber die sind doof wenn das Script mittendrin abgebrochen wird.

MfG Peschmä

Blackhawk
25-07-2005, 08:12
Aber die sind doof wenn das Script mittendrin abgebrochen wird.

MfG Peschmä
Dafuer schreib ich am Anfang vom Script imme rne Routine, die ueberprueft, ob das Lockfile noch stimmt (Also die PID, die drin steht, noch laueft.)

peschmae
25-07-2005, 10:54
Ja, das kann man natürlich - aber dann ists ja am Ende doch wieder praktisch dasselbe wie die ursprünglich hier angewendete Methode nur etwas komplizierter halt weil man da noch eine Datei erstellt. Oder übersehe ich da was?

(Jetzt mal ausgenommen der Fall wo das Script unter mehreren Namen existiert oder so)

MfG Peschmä

RapidMax
25-07-2005, 17:11
Um das zu verhindern setzt ich ein trap um das Lockfile zu entfernen.

Gruss, Andy