Frage

Ich habe eine Website geschrieben in PHP (CakePHP), wo bestimmten ressourcenintensive Aufgaben, die von einem Hintergrundprozess behandelt werden. Dies wird durch die Nachrichtenwarteschlange Beanstalkd getan. Ich brauche eine Möglichkeit, den Status dieses Hintergrundprozess abzurufen, damit ich es mit Monit überwachen kann.

Der Hintergrundprozess ist ein CakePHP Shell (nur ein PHP CLI-Skript), die mit Beanstalkd in Verbindung steht. Es tut einfach eine Reserve () auf Benastalkd und wartet auf eine neue Nachricht. Wenn es eine Nachricht erhält, verarbeitet sie es. Ich möchte einen Weg, diesen Prozess der Überwachung mit Monit , so dass es den Hintergrundprozess neu gestartet werden kann, wenn etwas schief gegangen ist .

Was habe ich über so weit zu denken ist ein PHP-CLI Skript zu schreiben, die eine Nachricht in Beanstalkd fällt. Der Hintergrundprozess nimmt die Nachricht auf und irgendwie kommuniziert es internen Status zurück auf den CLI-Skript. Aber wie? Sockets? Geteilte Erinnerung? Einige andere IPC-Methode?

Oder bin ich vielleicht auch hier ist kompliziert und ist es eine viel einfachere Art und Weise mit Monit einen solchen Prozess zu überwachen?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Hier ist, was ich am Ende am Ende zu tun.

Das CLI Skript eine Verbindung beanstalkd, erstellt eine neue Warteschlange (Rohr) und beginnt es zu beobachten. Dann fällt ihm eine höchste Priorität Nachricht in der Warteschlange, die die Hintergrund-Daemon zu beobachten ist. Diese Botschaft enthält den Namen der neuen Warteschlange, die die CLI Skript-Überwachung ist.

Der Hintergrundprozess Diese Nachricht fast sofort erhält (weil es höchste Priorität ist), erzeugt eine Statusmeldung und legt sie in der Warteschlange, die die CLI Skript zu beobachten ist. Das CLI Skript empfängt und schließt dann die Warteschlange.

Wenn die CLI Skript erhält keine Antwort in 30 Sekunden, um es mit einem Fehler beenden wird angibt, der Hintergrund-Daemon ist (wahrscheinlich) gehängt.

Ich band alles in Monit. Monit kann nun prüfen, ob der Hintergrund-Daemon (über die PID-Datei und Prozessliste) ausgeführt wird und prüfen, ob es tatsächlich noch die Verarbeitung von Nachrichten (durch das CLI-Tool zu testen, ob es auf Statusanfragen reagiert)

Andere Tipps

Es ist wahrscheinlich ein Plugin Monit oder Nagios zu verbinden, die Statistiken laufen und zurück, wenn es ‚zu viele‘. Es gibt keine ‚Protokoll‘ geschrieben bereits für das, aber t scheint nicht schwer zu überschreiten eine bestehende textbasierte zu ändern (wie NNTP oder SMTP) zu tun, was Sie wollen. Es bedeutet es in C zu schreiben, obwohl von den Blicken von ihm.

Von einem CLI-PHP-Skript, würde ich es durch eine gehen (oder beide) von zwei verschiedenen Methoden.

1 / Drop eine (low-ish) Priorität Nachricht in die Warteschlange, und stellen Sie sicher, dass es wieder innerhalb von wenigen Sekunden kommt. Um es in eine dedizierte Warteschlange und sicherstellen, dass es nichts gibt es, bevor Sie ihn in dort auch eine gute Ergänzung wäre. 2 / Führen Sie eine Statistik 'und sehen, wie viele warten. ‚Strom Jobs-ready‘

Um die Informationen zurück zu einer Website zu erhalten (oder so), können Sie in eine Datei schreiben können, oder in so etwas wie Memcached, die gelesen GTs und beaufschlagt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top