Konsole, Cronjobs und Hintergrundarbeit
Diese Seite richtet sich an Ingenieure, die Arbeit entwerfen, die nicht innerhalb einer Webanfrage laufen soll: Importe, Bereinigungen, E-Mails, Indexierung, große Inhaltsoperationen. Exponential hat dafür drei Mechanismen, plus die Konsole, die sie alle ausführt.
Inhalt
Die Konsole
bin/php/console ist ein Einstiegspunkt für jeden Befehl (Installationen legen meist eine Abkürzung ./console im
Hauptverzeichnis an). Sie erkennt Befehle zur Laufzeit:
| Quelle | Befehlsname |
|---|---|
bin/php/<name>.php | exp:<name> (plus Namen, die mit @alias im Docblock deklariert sind, etwa exp:help) |
bin/shell/<name>.sh | shell:<name> |
extension/<ext>/bin/php/<name> | ext:<ext>:<name> |
| ein Cronjob-Teil | cron:<part> |
Der Code eines Kernel-Befehls ist eine Klasse Exponential\Runnable\Command in kernel/private/classes/commands/; die
Datei in bin/php/ ist ein einzeiliger Einstiegspunkt. Skripte starten über eZScript, nicht über ezpKernelWeb.
Referenz: Exponential Console; für Autoren
Konsolenbefehle.
php bin/php/console list # every command
php bin/php/console list cron # cronjob parts
php bin/php/console help exp:preload # the help of one commandCronjob-Teile
runcronjobs.php führt die in settings/cronjob.ini konfigurierten Teile aus: [CronjobSettings] Scripts[] für den
Standardteil und [CronjobPart-<name>] Scripts[] für benannte Teile wie frequent und infrequent. Der Code eines
Teils ist eine Klasse Exponential\Runnable\CronjobPart in kernel/private/classes/cronjobs/.
php runcronjobs.php frequentDie Gruppe frequent ist auf jeder Installation wichtig: Sie enthält unter anderem den Teil audit, der den Audit-Trail
indexiert, ausliefert, Warnregeln auswertet und rotiert (Der Audit-Trail). Cronjobs
lassen sich in Konsole und Administration auflisten, ausführen und pausieren
(Cronjob-Konsole, Cronjobs pausieren).
Inhaltsjobs
Große Entfernungs-, Kopier- und Verschiebevorgänge, Paketinstallationen und Audit-Exporte laufen als Inhaltsjobs: Die Anfrage reiht den Job ein und kehrt zurück, und die Arbeit läuft in Stapeln im Hintergrund weiter (Inhaltsjobs, Funktionsseite Inhaltsjobs).
Die Job-Warteschlange: expqueue
expqueue ist eine datenbankgestützte Job-Warteschlange für Erweiterungen, ab 6.0.15 von composer.json verlangt und
inaktiv, bis sie aktiviert wird. Erzeuger reihen einen Job mit einem Aufruf ein; Worker führen ihn auf der
Kommandozeile, über Cron oder als systemd-Dienst aus, nie innerhalb einer Webanfrage. Sie bietet Prioritätsklassen,
Wiederholungen mit Backoff, eine Dead-Letter-Ablage, Idempotenzschlüssel und Leases mit einem Aufräumer
(expqueue: die Job-Warteschlange,
Warteschlangen mit expqueue).
Was Sie verwenden
| Bedarf | Verwenden Sie |
|---|---|
| Regelmäßige Wartung (Bereinigung, Sammel-E-Mails, Index-Aktualisierungen) | einen Cronjob-Teil |
| Eine große Inhaltsoperation, die ein Redakteur startet | einen Inhaltsjob |
| Arbeit, die Ihr Code einreiht, mit Wiederholungen und Prioritäten | expqueue |
| Eine Betriebsaufgabe, von Hand oder aus einem Bereitstellungsskript ausgeführt | einen Konsolenbefehl |
Regeln
- Ein Cronjob-Teil muss gefahrlos zweimal laufen und unterbrochen werden können.
- Ein Befehl muss seinen
--help-Text und seine Exit-Codes stabil halten, weil Skripte und Cron davon abhängen, und sollte--dry-runanbieten, wenn er Daten ändert. - Gemeinsame Logik gehört in eine Dienstklasse, die Views, Befehle und Teile alle aufrufen (Muster für Hintergrundarbeit).
- Langlaufende Worker sehen eine Klassenänderung erst nach ihrem Neustart, wie die Worker von Velocity.
Verwandte Seiten
- Cronjobs
- CLI-Skripte
- Befehle, Cronjob-Teile und Modul-Views als Klassen
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.