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

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



Hallo,

Am Sat, 21 Apr 2012, Ulf Volmer schrieb:
>On Sat, Apr 21, 2012 at 02:02:55AM +0200, David Haller wrote:
>> 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.

Und ich darauf, daß immer ein 'bin/perl [options]' vor dem Scriptnamen steht.

>> 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... :)

Auch wieder wahr ;) Da könnte man dann wohl die fd's von $$ abklappern,
ob da das Script als symlink von /proc/$$/fd/3 auftaucht oder so. Und
das ganze zusätzlich zu ner PID-Datei ;)

>> 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.

s.o. wenn mir die Datei gehört kann ich da dann wohl auch
reinschreiben was ich will ...

>> 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. 

Ah, der "start-stop-daemon" fiel mir nicht ein ;)

>Siehe /lib/lsb/init-functions.

Der LSB Kram ist zu neu für mich, der ist bei mir noch nicht
"angekommen" (und v.a. wo's das nun gibt und wo nicht) ;)

-dnh

-- 
Meine Theorie ist, daß die großen Softwarefirmen eine Art Bullshit-Bingo
spielen, nur halt umgekehrt.  Wer am meisten Bugs in seinem Produkt
unterbringt, ohne an dem beschissenen Produkt zu verendet, hat gewonnen.
    -- fefe


Reply to: