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

Re: Checken, ob ein (Perl-)Skript schon läuft



On Sat, Apr 21, 2012 at 02:02:55AM +0200, David Haller wrote:
> Hallo,
> 
> Am Sat, 21 Apr 2012, Ulf Volmer schrieb:
> >On Sat, Apr 21, 2012 at 12:57:30AM +0200, Andre Tann wrote:
> >> ich möchte gerne innerhalb eines (Perl-)Skriptes prüfen, ob dieses
> >> Skript schon anderweitig gestartet wurde. Wenn das nikcht der Fall ist,
> >> dann soll das Skript weiterlaufen, sonst soll es sich beenden.
> >> 
> >> Überlegt habe ich, die Prozesstabelle nach dem Skriptnamen zu
> >> durchsuchen, etwa
> >> 
> >> 	ps a | grep /pfad/zum/skrip[t]
> >> 
> >> Das ist aus vielerlei Gründen blöd. 
> >
> >Die IMHO einzig saubere Lösung ist es, es so zu machen, wie andere Daemons
> >es auch machen, pid- File erzeugen und auf dessen Existenz prüfen.
> 
> Unnötig. Und die Existenz allein ist, öhm, bestenfalls notwendig, aber
> nicht hinreichend.

Man muß auch die PID noch prüfen, ja.

> Perl-Scripte werden immer von perl ausgeführt. Ich hab z.B. ein
> ~/bin/dhweather. Führe ich das als 'dhweather' aus, findet sich in
> der Ausgabe von 'ps x':
> 
>     /usr/bin/perl -ws /home/dh/bin/dhweather

Oder 
/usr/bin/perl -ws ./dhweather
/usr/bin/perl -ws ./bin/dhweather

Oder wie auch immer Du das Script aufrufst. Darauf wollte Andre hinaus.

> als Command. Ein
> 
>     ps ax | grep 'bin/[p]erl.*${SCRIPTNAME}'

Damit muß dann der Scriptname im System eindeutig sein, unabhängig vom
Pfad. Oder auch vom User. Das empfinde ich als unsauber.

Vom bösen Mitnutzer, der seinen Prozessnamem einfach auf
'/usr/bin/perl -ws /home/dh/bin/dhweather' setzt, möchte ich ja gar nicht
erst anfangen... :)

> sollte also ein laufendes Script finden. Um sicherzugehen könnte man
> im perl-script /proc/$$/cmdline einlesen und irgendwo loggen, z.B.:

Schon besser. Troztdem finde ich PID- Files erheblich eleganter.

> Generell sind PID/Lockfiles natürlich sinnvoll.  Unter SUSE gibt's
> dafür z.B. start-/check-/killproc wo man ein PID-File angeben
> kann. Anderswo sollte es sowas auch geben (deamon ...?) oder halt
> ggfs. die deamontools oder so. Oder man macht's im Script selber.

Unter Debian gibt es da start_daemon/killproc u.a. 
Siehe /lib/lsb/init-functions.

Gruß,
Ulf.


Reply to: