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: