Was ist Task-Scheduling
Traditionell mussten Sie für jede regelmäßig ausgeführte Aufgabe einen eigenen Cron-Eintrag anlegen. Dabei liegen die Zeitpläne außerhalb des Quellcodes, sind nicht versioniert, und für Änderungen ist stets ein SSH-Zugang nötig. Mit dem Laravel-Scheduler definieren Sie Zeitpläne fließend in der Anwendung. Auf dem Server genügt ein einziger Cron-Eintrag; die Definitionen versionieren Sie zusammen mit dem Code. Zeitpläne werden üblicherweise inroutes/console.php definiert.
Mit dem Artisan-Befehl
schedule:list sehen Sie definierte Tasks und deren nächste Ausführung.Ausführungsablauf des Schedulers
Zeitpläne definieren
Zeitpläne stehen inroutes/console.php.
Alternativ nutzen Sie die Methode withSchedule in bootstrap/app.php.
Was Sie planen können
Artisan-Kommandos
Mitcommand planen Sie Artisan-Kommandos – als Kommandoname oder Klassenname.
Queue-Jobs
Mitjob planen Sie Queue-Jobs direkt, ohne Closure.
Shell-Kommandos
Mitexec führen Sie OS-Kommandos aus.
Closures
Mitcall planen Sie beliebige PHP-Closures.
__invoke sind möglich.
Ausführungsfrequenz
Wichtige Methoden
Direkte Cron-Ausdrücke
Mitcron verwenden Sie beliebige Cron-Ausdrücke.
Kombinierte Bedingungen
Frequenz- und Wochentagsmethoden lassen sich kombinieren.Zeitzone
Mittimezone legen Sie die Zeitzone pro Task fest.
config/app.php unter schedule_timezone.
Bedingungen
when / skip
when führt aus, wenn die Closure true liefert; skip überspringt bei true.
environments
Mit environments grenzen Sie die Ausführung auf bestimmte Umgebungen ein.
Zeitfenster
between / unlessBetween beschränken das Zeitfenster.
Wochentagsbeschränkungen
Überlappungen verhindern
Standardmäßig startet die nächste Ausführung, auch wenn die vorherige noch läuft. MitwithoutOverlapping warten Sie, bis der vorherige Lauf beendet ist.
withoutOverlapping verwaltet den Lock über den Application-Cache.
Bei stecken gebliebenen Tasks können Sie den Lock mit schedule:clear-cache freigeben.Ausführung auf mehreren Servern
Läuft der Scheduler auf mehreren Servern, sorgtonOneServer dafür, dass ein Task nur auf einem Server ausgeführt wird.
Ablauf mit onOneServer()
Tasks gruppieren
Mitgroup wenden Sie dieselben Einstellungen auf mehrere Tasks an.
Hintergrundausführung
Standardmäßig werden Tasks mit derselben Startzeit sequenziell ausgeführt. Ein langlaufender Task verzögert die nachfolgenden. MitrunInBackground starten Sie sie parallel.
Wartungsmodus
Im Wartungsmodus werden Tasks nicht ausgeführt. MitevenInMaintenanceMode erzwingen Sie die Ausführung trotzdem.
Ablauf im Wartungsmodus
Scheduler pausieren
Sie können den Scheduler ohne Codeänderung anhalten.evenWhenPaused.
Ausgaben verarbeiten
In eine Datei schreiben
MitsendOutputTo schreiben Sie die Ausgabe in eine Datei.
appendOutputTo wird die Ausgabe angehängt.
Per E-Mail versenden
MitemailOutputTo verschicken Sie die Ausgabe per Mail.
Setzt eine Mail-Konfiguration voraus.
emailOutputOnFailure.
Task-Hooks
Mitbefore und after fügen Sie Code vor bzw. nach dem Task ein.
onSuccess und onFailure.
Deployment auf dem Server
1
Cron-Eintrag hinzufügen
Fügen Sie in der crontab eine einzige Zeile hinzu, um den Scheduler jede Minute laufen zu lassen.Mit
crontab -e bearbeiten Sie die crontab.2
Scheduler-Betrieb prüfen
Listen Sie die Tasks und die nächsten Ausführungen auf.
Lokale Entwicklung
Statt Cron nutzen Sie lokalschedule:work, um den Scheduler dauerhaft laufen zu lassen.
Strg + C.
Sub-Minuten-Zeitpläne (kürzer als eine Minute)
Cron ist auf eine Minute begrenzt; Laravel bietet aber sekündliche Zeitpläne.schedule:run bis zum Ende der Minute weiter und führt alle Sub-Minuten-Tasks aus.
Um einen laufenden schedule:run während eines Deployments zu unterbrechen, fügen Sie dem Deploy-Skript Folgendes hinzu: