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: