Re: Checken, ob ein (Perl-)Skript schon läuft
David Haller schrieb:
> 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.
Nun dann schreibt man die eigentliche PID des entsprechenden Prozesses
in den PID-File.
Wenn dann der PID-File existiert, kann prüfen auch ob der dazugehörige
Prozess noch existiert. So kann man sicher sein das nicht vergessen
wurde, den PID-File zu löschen, beim beenden des Scripts (z.B. Absturz
von den Script oder den Perl-Interpreter).
Außerdem kann man dann eventuelle hinterlassene Ressources des
abgestürzten ursprünglichen Scripts ordnungsgemäß Aufräumen.
> ...
>
> 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.
>
Dafür gibt es für Debian "start-stop-daemon (8)" welches immer
Installiert ist.
--
Gruß Jochen
Reply to: