← Neuigkeiten

Dauerhafte Prozesse: Queue-Worker, Horizon und Ihre eigenen Programme ständig in Betrieb

Neuigkeiten 6 Min. Lesezeit

Manche Anwendungen brauchen etwas, das es im Shared Hosting bisher nicht gab: ein Programm, das nie endet. Einen Worker, der die Queue abarbeitet, sobald ein Job eintrifft, Horizon, einen Message-Consumer oder einen Bot.

Bisher blieb nur ein Cronjob. In Laravel startet der Scheduler jede Minute ein queue:work --stop-when-empty, das die anstehenden Jobs abarbeitet und sich dann beendet. Das funktioniert, aber eine Willkommens-E-Mail kann bis zu einer Minute brauchen, bis sie verschickt wird, und für alles, was ständig laufen muss, wie Horizon, gab es keinen Platz.

Jetzt gibt es in den Tarifen Avanza, Max und Elastic dauerhafte Prozesse: Programme, die Ihr Konto ständig in Betrieb hält.

Was Sie dauerhaft laufen lassen können

Unter Hosting → Ihr Dienst → Tools → Prozesse gibt es einen neuen Bereich, Dauerhafte Prozesse. Sie klicken auf Prozess hinzufügen und wählen:

  • Queue-Worker: php artisan queue:work mit den Queues, die Sie angeben, in der Reihenfolge ihrer Priorität. Wenn sich Jobs stauen, können Sie mehrere Worker für dieselben Queues einrichten.
  • Horizon: php artisan horizon, das seine eigenen Worker verteilt und sein Dashboard und seine Metriken mitbringt.
  • Eigener Befehl: eine Shell-Zeile für Symfony Messenger, einen Message-Consumer, einen Bot oder jedes andere Programm, das im Hintergrund arbeitet.

Sie geben den Ordner der Anwendung an und, beim Worker und bei Horizon, die PHP-Version, mit der sie laufen sollen. In weniger als einer Minute wechselt der Prozess von Wird gestartet zu Läuft.

Avanza erlaubt 3 Prozesse, Max 5 und Elastic 8.

Fällt er aus, startet er von selbst neu

Ein Wächter prüft jede Minute die Prozesse des Kontos und startet jeden, der nicht läuft. Beendet sich das Programm von selbst, etwa wenn ein Worker sein --max-time erreicht, um Speicher freizugeben, startet es innerhalb einer Sekunde neu und übernimmt die in diesem Moment veröffentlichte Version.

Endlos versucht er es allerdings nicht. Stürzt ein Prozess fünfmal hintereinander direkt nach dem Start ab, bleibt er auf Fehlerhaft und wartet, bis Sie ihn neu starten, damit die CPU Ihres Kontos nicht für etwas verbraucht wird, das nicht starten kann.

Um den Grund zu finden, hat jeder Prozess sein eigenes Protokoll, mit einer Zeile bei jedem Start und einer weiteren bei jedem Ende. Fast immer erklärt die Zeile vor jedem Absturz die Ursache: ein falsch geschriebener Ordner, eine fehlende PHP-Erweiterung oder ein Dienst, den die Anwendung nicht erreicht. Sie beheben den Fehler und klicken auf Neu starten.

Im selben Panel können Sie die Prozesse anhalten, starten, bearbeiten oder löschen. Alles läuft mit dem Benutzer Ihres Kontos und innerhalb seiner Ressourcen, derselben, die auch Ihre Websites nutzen.

Mit Deploy+, ohne an den Neustart denken zu müssen

Ein Worker lädt den Code beim Start und hält ihn im Speicher. Nach der Veröffentlichung einer neuen Version muss er also neu gestartet werden. Mit Deploy+ müssen Sie nichts tun: Am Ende jedes Deployments, und auch beim Zurückkehren zu einer früheren Version, startet es die dauerhaften Prozesse dieser Anwendung neu. Jeder Worker beendet den Job, an dem er gerade arbeitet, und startet mit dem neuen Code, und das Deployment-Protokoll zeigt, in welchem Zustand sich jeder befindet.

Wenn Sie ein Laravel-Projekt verbinden, bietet Ihnen der Assistent von Deploy+ selbst an, dessen Queue-Worker dauerhaft laufen zu lassen, mit bereits eingetragenem Ordner.

Was nicht abgedeckt ist

Ein dauerhafter Prozess ist für Hintergrundarbeit gedacht. Er ist nicht für Programme gedacht, die auf einem Port lauschen, wie ein Node.js-Server, eine Python-Anwendung oder Laravel Reverb. Für WebSockets in Laravel empfehlen wir einen Pusher-kompatiblen Dienst wie Ably oder Pusher selbst, die Laravel von Haus aus unterstützt; wir erklären das unter WebSockets in Laravel. Wenn Ihr Projekt einen eigenen Server braucht, benötigen Sie einen VPS.

In Inicia, Webmaster und in den Konten eines Multi-Account-Hostings gibt es keine dauerhaften Prozesse. Queues lassen sich weiterhin mit dem Scheduler abarbeiten, mit bis zu einer Minute Wartezeit.

Wenn Sie Horizon nutzen oder Ihre Queues in Redis haben möchten, sehen Sie sich auch das persistente Redis an, das gleichzeitig erscheint. Die Schritt-für-Schritt-Anleitung mit den Zuständen, den Optionen jedes Typs und was zu tun ist, wenn einer auf „Fehlerhaft“ bleibt, finden Sie im Leitfaden zu dauerhaften Prozessen.

Wir arbeiten weiter an Verbesserungen.

Sehen Sie, woran wir gerade arbeiten, oder schreiben Sie uns, wenn Ihnen etwas fehlt.