Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,075 of 9,075 pages
About the help in other languages
All help pages

Cronjob-Teile anhalten

Lesen Sie diese Seite, wenn Sie Cronjob-Teile eine Zeit lang zurückhalten möchten - während eines Releases, einer Datenmigration oder eines Index-Neuaufbaus -, ohne die Crontab auf jedem Server zu bearbeiten, oder wenn…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/features/6.0/cronjob-pause.md

On this page

This page is a translation. Read the English original

Cronjob-Teile anhalten

Lesen Sie diese Seite, wenn Sie Cronjob-Teile eine Zeit lang zurückhalten möchten - während eines Releases, einer Datenmigration oder eines Index-Neuaufbaus -, ohne die Crontab auf jedem Server zu bearbeiten, oder wenn eine Extension Teile bisher über Dateien cronpart_deactivated_<part>.txt angehalten hat.

Kurz gesagt

  • Setup > Cronjobs hält einen Teil an (Anhalten auf seiner Karte) oder alle Teile (Alle Teile anhalten), bis jemand ihn fortsetzt. Ein angehaltener Teil wird von runcronjobs.php ausgelassen, wer ihn auch startet: die Crontab, ./console cron:<part>, die cron:-Befehle von Velocity oder die Konsole. Ein Teil, der angehalten wird, während er läuft, beendet das gerade laufende Skript und lässt die Skripte danach aus.
  • Ein einzeln ausgeführtes Skript (--script, oder Starten neben einem Skript) wird ausgelassen, solange ein Teil, der es aufführt, angehalten ist.
  • Die Konsole zeigt auf der Karte Angehalten, seit wann, von wem und die beim Anhalten angegebene Notiz, einen Hinweis, solange alle Teile angehalten sind, einen Wert Angehalten in der Übersicht und einen Abschnitt Pausen mit der Angabe, wer was angehalten und fortgesetzt hat und warum. Ein angehaltener Teil kann nicht aus der Konsole gestartet werden.
  • Die Kachel Cronjobs in der Setup-Übersicht (admin4) gibt an, wie viele Teile angehalten sind, solange einer es ist.
  • Der Hinweis von runcronjobs.php gibt an, seit wann, von wem und warum ein Teil angehalten ist.
  • Der Zustand ist eine Datei pro Teil, in dem Aufbau, den solche Extensions bereits verwenden, sodass eine Website, die Teile auf diese Weise angehalten hat, sie behält, und eine solche Seite denselben Zustand zeigt. cronjob.ini [PauseSettings] Pause=disabled schaltet die Prüfung ab.

So funktioniert es

runcronjobs.php fragt expCronjobPause::notice(), nachdem es die Skripte ausgewählt hat und bevor es den Filter cronjob/part/run fragt. Ist der Lauf angehalten, gibt es einen Hinweis aus und endet mit Exit-Code 0, wie bei einem Teil, den ein Listener auslässt:

Running cronjob part 'frequent'
Notice: The cronjob part 'frequent' is paused (Setup > Cronjobs). Paused since 2026-10-15 13:05 CEST by admin: Index rebuild until noon.

Die Zeit ist die Zeit der Zustandsdatei, in der Zeitzone des Servers; by und die Notiz stammen aus der Historie und entfallen bei einer auf anderem Weg vorgenommenen Pause (siehe unten), die Notiz außerdem, wenn keine angegeben wurde.

Angehalten bedeutet, dass die Datei cronpart_deactivated_<part>.txt den Inhalt 1 hat; jeder andere Inhalt oder keine Datei bedeutet, dass der Teil läuft. all hält alle Teile an; die Skripte von [CronjobSettings] (der Teil global in der Konsole) haben den leeren Namen, cronpart_deactivated_.txt. Die Dateien liegen in <cache directory>/cronjob_control/ oder in dem Verzeichnis unterhalb des var-Verzeichnisses, das [PauseSettings] Directory nennt.

Eine Pause, während ein Teil läuft. runcronjobs.php fragt vor jedem weiteren Skript des Teils erneut. Das Skript, das läuft, wenn der Teil angehalten wird, läuft bis zu seinem Ende weiter (nichts wird auf halbem Weg gestoppt); die Skripte danach werden ausgelassen:

Completing cronjobs/notification.php at: 10/15/2026 05:10 am
Notice: The cronjob part 'frequent' is paused (Setup > Cronjobs). Left out: 'workflow.php' and the scripts after it.

Jeder Lauf, den eine Pause auslässt, wird protokolliert, und zwar in <log directory>/cronjob_skipped.log (der Hinweis, der Teil, das Skript und der Siteaccess), zusätzlich zum Hinweis in der Ausgabe des Laufs selbst, sodass Sie nachträglich feststellen können, welche Läufe eine Pause zurückgehalten hat. Die Konsole weigert sich, einen angehaltenen Teil zu starten, sodass ihre Läufe dieses Protokoll nie erreichen.

Was eine Pause nicht zurückhält. Eine Pause wird nur von runcronjobs.php gelesen. Die cron:-Befehle von ./console und von Velocity führen runcronjobs.php aus, werden also ebenfalls zurückgehalten; die Queue-Worker von expqueue, die als Dienst (systemd) laufen, sind keine Cronjobs und arbeiten weiter - stoppen Sie dafür den Dienst. Das Anhalten des Teils, der einen Worker aus der Crontab startet, hält diesen Start zurück.

Die Prüfung kommt vor dem Filter, damit die Listener einer Website weiterhin über jeden Teil entscheiden, der nicht angehalten ist, und damit eine Pause auch dann gilt, wenn eine Website [RunnableSettings] Listeners[] zurücksetzt.

Das Verzeichnis folgt dem Siteaccess. Das Cache- und das var-Verzeichnis stammen aus dem Siteaccess, in dem ein Skript läuft. Wenn die Crontab runcronjobs.php -s <site> ausführt und diese Website ein anderes VarDir hat als der Administrations-Siteaccess, in dem die Konsole läuft, schreibt die Konsole Dateien, die der Cronjob nie liest, und das Anhalten bewirkt nichts. Führen Sie die Crontab mit demselben Siteaccess aus, oder setzen Sie [PauseSettings] Directory in settings/override/cronjob.ini.append.php, damit beide dasselbe Verzeichnis finden.

Die Namen all und global sind reserviert: all hält alle Teile an, und global ist der Name, unter dem die Konsole die Skripte von [CronjobSettings] führt. Ein Cronjob-Teil namens all oder global kann nicht einzeln angehalten werden.

Mehrere Server. Die Dateien sind lokal auf einem Server, sofern das Verzeichnis nicht geteilt wird. Wenn die Crontab auf einem anderen Server läuft als dem, von dem die Konsole ausgeliefert wird (ein Cluster hinter einem Load Balancer), setzen Sie [PauseSettings] Directory auf ein Verzeichnis unterhalb des var-Verzeichnisses, das alle Server teilen (zum Beispiel auf dem gemeinsamen Speicher des Clusters), oder halten Sie auf dem Server an, auf dem die Crontab läuft.

Benutzer. Die Kommandozeile und die Worker von Velocity können als root laufen, der Webserver als Website-Benutzer; beide schreiben diese Dateien. Eine Pause wird in eine temporäre Datei geschrieben, die über die alte umbenannt wird (sodass eine Datei, die dem anderen Benutzer gehört, ersetzt und nicht geöffnet wird), und die Datei und die Historie erhalten den Dateimodus der Installation (site.ini [FileSettings] StorageFilePermissions, innerhalb seiner Grenzen), sodass der andere Benutzer sie seinerseits ersetzen und ergänzen kann.

Audit. Jedes Anhalten und Fortsetzen wird als system.cronjob.pause oder system.cronjob.resume aufgezeichnet (Objekt: der Teil, all oder global; after.note mit der Notiz, wenn eine angegeben wurde), siehe das Prüfprotokoll. Beide sind standardmäßig eingeschaltet, im Kanal system.

Eine Notiz. Die Konsole hat ein Feld, Notiz zum Anhalten oder Fortsetzen (optional), unterhalb der Schaltflächen der Werkzeugleiste. Das nächste auf der Seite gedrückte Anhalten oder Fortsetzen (das eines Teils oder Alle Teile anhalten) speichert sie mit seiner Zeile in der Historie: warum ein Teil zurückgehalten wird und bis wann. Sie ist eine Zeile mit höchstens 200 Zeichen (expCronjobPause::NOTE_LENGTH; Zeilenumbrüche werden zu Leerzeichen) und erscheint beim angehaltenen Teil, im Hinweis bei einer Pause aller Teile, unter Pausen, im Hinweis von runcronjobs.php und damit in cronjob_skipped.log. Aus Code: expCronjobPause::pause( $part, $user, $note ), resume( $part, $user, $note ).

Die Setup-Übersicht. Die Kachel Cronjobs zeigt 1 Teil angehalten, n Teile angehalten oder Alle Teile angehalten, solange eine Pause gilt, und sonst nichts (menu.ini [Leftmenu_setup] LinkFigureTemplates[cronjobs], die Fetch-Funktion fetch( 'setup', 'cronjob_pauses' ): ein Blick in das Verzeichnis der Zustandsdateien). Wie jeder Wert dort wird sie nur auf einer Kachel gezeichnet, die der Benutzer öffnen darf (setup/managecronjobs).

Das Anhalten aus der Konsole schreibt die Datei über eZFile::create() (es gelten die Grenzen des Dateimodus der Installation) und fügt eine Zeile zu var/<vardir>/log/cronjob_pause.log hinzu: Zeit, Teil, Anhalten oder Fortsetzen, die Objekt-ID des Benutzers (keine Kopie des Namens: Die Seite und der Hinweis zeigen das aktuelle Login des Benutzers, nachgeschlagen über die ID, sodass ein umbenannter Benutzer unter dem neuen Namen erscheint; das Login einer älteren Zeile nur, wenn der Benutzer nicht mehr existiert) und die Notiz (leer, wenn keine angegeben wurde; Zeilen, die geschrieben wurden, bevor es Notizen gab, haben keine). Eine auf anderem Weg vorgenommene Änderung - eine Shell, eine Extension - hat dort keine Zeile; die Karte zeigt trotzdem, seit wann der Teil angehalten ist (die Zeit der Datei), und keinen Namen, wenn die Datei neuer ist als die letzte hier aufgezeichnete Pause. Die Konsole liest nur das Ende des Protokolls (256 KB), sodass es wachsen kann, ohne die Seite zu verlangsamen; rotieren Sie es nach Belieben mit den anderen Protokollen.

Aus der Konsole lassen sich nur Teilnamen anhalten, die diese Installation definiert, sowie all; ein Name besteht nie aus mehr als Buchstaben, Ziffern, _, . und -, sodass er das Verzeichnis nicht verlassen kann.

Einstellungen

DateiBlockSchlüsselStandardBedeutung
settings/cronjob.iniPauseSettingsPauseenableddisabled: runcronjobs.php ignoriert die Pausendateien, und die Konsole bietet kein Anhalten an
settings/cronjob.iniPauseSettingsDirectoryleerVerzeichnis der Pausendateien unterhalb des var-Verzeichnisses; leer: <cache directory>/cronjob_control

Umstieg von einer Extension, die Teile angehalten hat

Solche Seiten stützten sich auf einen Patch von runcronjobs.php, den Exponential nicht enthält; unter Exponential schalteten sie Dateien um, die nichts las, sofern die Website keinen eigenen Listener für den Filter hatte. Jetzt liest der Kernel sie:

  • Ein angehalten gebliebener Teil (eine Datei mit 1) wird von nun an ausgelassen. Sehen Sie nach der Aktualisierung unter Setup > Cronjobs nach und setzen Sie fort, was laufen soll.
  • Ein eigener Listener einer Website, der dieselben Dateien gelesen hat, kann bleiben; er wird nur für Teile gefragt, die nicht angehalten sind.

Tests

expCronjobPauseTest (keine Datenbank): Zu Beginn ist nichts angehalten; Anhalten und Fortsetzen eines Teils, mit der Historie und wer es getan hat; all; ein einzeln ausgeführtes Skript, während sein Teil angehalten ist, auch mit einem Verzeichnis im Namen; wer angehalten hat, wird vergessen, wenn sich die Datei seitdem geändert hat; von anderen geschriebene Zustandsdateien; Teilnamen, die das Verzeichnis verlassen würden; beschädigte Zeilen in der Historie; Pause=disabled; runcronjobs.php fragt die Pause vor dem Filter und erneut vor jedem weiteren Skript ab und protokolliert beide Arten des Auslassens (aus seinem Quelltext gelesen); eine Zustandsdatei, die sich nicht öffnen lässt, wird ersetzt; die Zustandsdatei und die Historie erhalten StorageFilePermissions; eine Notiz wird beim Anhalten und Fortsetzen gespeichert, auf eine kurze Zeile gekürzt, und der Hinweis gibt an, seit wann, von wem und warum; Zeilen in der Historie ohne Notiz; die Anzahl in der Setup-Übersicht; das Notizfeld der Konsole und wo die Notiz erscheint, in beiden Designs. AdminSetupOverviewTest deckt den Wert der Kachel und seine Übersetzungen ab.

Verwandte Seiten

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.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x