[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Überprüfen ob ein Script schon läuft



Thomas Antepoth <debian@antepoth.de> writes:

> Dieses Scriptlein ist zum Testen:
>
> == cut ==
> #!/bin/bash
>
> isrunning=`ps xufa | grep "$0" | grep -v grep | wc | awk '{ print $1 }'`
> echo $isrunning
>
> s=`ps xufa`
> isrunning=`echo "$s" | grep "$0" | grep -v grep | wc | awk '{ print $1 }'`
> echo $isrunning
> == cut ==

Ich nehme an, dass es beabsichtigt ist, dass das Skript kein Argument
von der Kommandozeile prüft, sondern feststellt, wie oft es selbst
läuft.

>
> Der erste "echo" liefert "4" - die beim Start von nur einer Instanz falsch 
> ist -

Da es sich selbst prüft, läuft es wegen der Subshell (der Pipe-Teil
`..|..|..`) im ersten Fall 2mal.  Die anderen 2 kann ich hier nicht
reproduzieren.

Du suchst nach "$0".  Wenn das als Namensteil eines anderen Prozesses
auftaucht, wird dieser mitgezählt.  Dasselbe gilt, wenn es sonstwo im
ps-Output auftritt.  Du musst mindestens nach ' $0$' suchen, was aber
auch nur die meisten Fälle abdeckt.

Dito für den grep -v.  Du kannst so nicht nach 'egrep' suchen, aber
auch nicht nach Sachen wie 'send_bugreport'.

wc | awk '{ print $1 }'  ist dasselbe wie wc -l.

Andere Lösungsmöglichkeiten, die du dir anschauen könntest:

- pidof dürfte das Gängigste sein:
    if pidof name; then echo "läuft"; fi

- killall funktioniert auf Linux gut, kann aber auf anderen Unixen
  gewisse Überraschungen bereiten:
    if killall -0 name; then ...

- pgrep ist nicht immer installiert:
    if pgrep name; then ...


Gruß,

 Heike



Reply to: