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

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

als Command. Ein

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

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

open(CMDL, "<", "/proc/$$/cmdline") or die "$!\n";
{ local $/;
  print <CMDL>;
}
close CMDL;

oder sowas in der Art. Das '.*' könnte man auch noch auf die im Script
angegebenen Flags einschränken, vgl.:

$ head -n 1 ~/bin/dhweather
#!/usr/bin/perl -ws

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.

HTH,
-dnh

-- 
"It is very easy to be blinded to the essential uselessness of them by the
sense of achievement you get from getting them to work at all."
 -- The Hitchiker's Guide to the Galaxy on the Sirius Cybernetics Corporation.
    Does that seem familiar to anything on THIS planet at THIS time?


Reply to: