Seite 1 von 1

Doppeltes ausführen/starten verhindern...

Verfasst: 07.01.2007, 10:10
von Wirths Media
Hallo,

wie kann ich testen ob ein Script bereits läuft (PHP)?

Das Script wird per Cron ausgeführt und soll, wenn es bereits läuft nicht noch einmal gestartet werden.

Mit einer Logdatei wäre es eine Variante, aber was ist, wenn das Script abgebrochen wird? - Dann wurde das Script nich mehr gestartet werden, da es ja angeblich noch läuft.

Danke

Daniel

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 07.01.2007, 11:03
von Monk
Wie bei Shell-Programmierung:

1. mit sauberer Fehlerbehandlung programmieren und
2a. PID im lock file (nicht 'logfile') vermerken, gucken ob es den Prozess wirklich noch gibt, und wenn nicht, dann aufräumen und weiter - oder
2b. sinnvolle "zu lange Laufzeit" definieren und wenn ein älteres lock file existiert, dann aufräumen und weiter

Verfasst: 07.01.2007, 11:23
von Wirths Media
Bin auf dieses hier gestoßen...

ps -ef | grep 'crondatei.php'

Meinst Du das gleiche???

Verfasst: 07.01.2007, 12:15
von Monk
Nein, ich meine Steuerung über ein lock file, das der Prozess vor der echten Arbeit schreibt und nachher wegräumt.

Du kannst natürlich auch in der Prozessliste nach aktuellen gleichen schauen. Das hat aber einige Hakeligkeiten. Ein paar lassen sich mit Sorgfalt bereinigen, aber:
- das Nachschauen ist prinzipiell nicht atomar hinzubekommen, so dass mit etwas Pech doch mehrere loslegen können,
- ein gleichzeitg testender Prozess sieht für andere (auch sich selbst) schon aus "wie bei der echten Arbeit", so dass sie sich leicht gegenseitig stoppen.

Verfasst: 07.01.2007, 17:18
von Wirths Media
Nein, ich meine Steuerung über ein lock file, das der Prozess vor der echten Arbeit schreibt und nachher wegräumt.
Ja, aber was mache ich, wenn das Script abbrechen sollte, dann wird der Wert nicht mehr gelöscht und das "nächste" Script denkt es ist noch ein zu gange...

Verfasst: 07.01.2007, 18:31
von Monk
Wie oben geschrieben, Punkte 1-2b:

zu (1): saubere Skripte brechen nicht einfach so ab ohne hinter sich aufzuräumen, ausser sie werden gekillt. Alles andere ist Schluderei.

zu (2): Erkennung und ggf. Aufräumerei von lock-Leichen ist Teil einer sauberen Prüfung zu Skriptanfang. Deswegen auch die Varianten
(a) Suche nach einem Prozess mit der dazu passenden PID oder
(b) Gucken, ob das fremde lock file "unmöglich alt" ist.

Im Detail ist noch ein bisserle mehr zu beachten, damit Prozesse sich auch in ekligen Ausnahmen nicht ins Gehege kommen. Aber etwas eigenes Nachdenken sollte schon sein :)

Verfasst: 07.01.2007, 18:48
von Wirths Media
Danke hast mir erst mal weitergeholfen, mal sehen was ich genau mache.

Gruß
Daniel