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

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



On Thu, 2005-03-17 at 06:50 +0100, Thomas Antepoth wrote:

> Die Pakete liegen momentan auf:
> 
> http://212.227.20.60/debian/killproc_2.06-1.diff.gz
> http://212.227.20.60/debian/killproc_2.06-1.dsc
> http://212.227.20.60/debian/killproc_2.06-1_i386.changes
> http://212.227.20.60/debian/killproc_2.06-1_i386.deb
> http://212.227.20.60/debian/killproc_2.06.orig.tar.gz

Gratulation. Hätte nicht gedacht, dass du das tatsächlich auf dich
nimmst :)

> 
> Wie man sieht, berücksichtigt "pidof" nicht, wenn ein Script sich selbst 
> abfragt. Dazu wäre ein zweiter Check auf die "$$" Variable notwendig - 
> geht das nur mir so oder reduziert sich da die Lesbarkeit?

Hat sich die Aufgabenstellung denn inzwischen verändert? Ich dachte du
wolltest nur wissen, ob bereits eine Instanz des Skriptes läuft. D.h.

pids=`pidof -x $0`
if [ `echo $pids | wc -w` -gt 1 ]; then
        echo "Ich laufe doch schon woanders..."

else
        echo "Endlich alleine auf dem Rechner..."
fi

implementiert doch schon die Logik, die du ursprünglich haben wolltest.

Richtig ist, dass wenn du auch noch die PIDs ausschliesslich der anderen
Instanzen *sehen* willst, du $$ aus der pidof Ausgabe rausfiltern musst,
ala s/[^0-9]$$[^0-9]//. Über die Lesbarkeit würde ich mir bei so
einfachen Standardkonstrukten übrigens keine Gedanken machen.

Noch wichtiger allerdings wäre der Hinweis aus der pidof manpage, nicht
nur nach $0 sondern dem Installationspfad des Skripts zu filtern (also
which `basename $0` falls das Skript im Pfad ist). Genau besehen ist $0
eigentlich auch falsch, da es ja einen relativen Pfad enthalten kann der
dann bei zwei Aufrufen desselben Skriptes differieren mag. Ein basename
muss also sowieso rein, und weil nur der Name zu unsicher ist, wie in
diesem Thread auch schon gesagt wurde, besser also der volle
Installationspfad des Skriptes. Und es würde mich wundern, wenn diese
Bemerkungen nicht auch für checkproc gälten. Was sagt die man page?

Schliesslich: ist es sicher, dass checkproc nur die "anderen" Instanzen
des Skriptes ausgibt, und nicht auch die, aus dem es ausgerufen wurde?
Wenn ja, dann wäre das sehr merkwürdig. Es sollte *alle* Instanzen
ausgeben, genauso wie pidof ...

Gruss, Bruno.





Reply to: