So konfigurierst du Laravel Cron Jobs und Aufgabenplanung
Laravel bietet eine integrierte Funktion zur Aufgabenplanung, die wiederkehrende Prozesse automatisiert. Mit Laravel Cron Jobs kannst du Aufgaben direkt in deiner Laravel-Anwendung planen und verwalten, ohne manuell Einträge in der System-Crontab hinzuzufügen. Der Laravel Scheduler unterstützt flexible Intervalle, Zeitzonen und Ausgabeverwaltung und eignet sich ideal zur Automatisierung von Datenbankbereinigungen, Report-Generierungen oder dem Versand von E-Mail-Benachrichtigungen.
In dieser Anleitung erfährst du, wie du Laravel Cron Jobs konfigurierst. Du lernst, den Laravel Task Scheduler einzurichten, eigene Artisan-Befehle zu erstellen und geplante Jobs in deinem Laravel-Projekt zu automatisieren.
Voraussetzungen
Bevor du beginnst, stelle sicher, dass die folgenden Voraussetzungen erfüllt sind:
- Du hast Zugriff auf eine laufende Instanz wie Ubuntu 24.04 mit einem aktiven Laravel-Projekt.
- Du bist als Nicht-Root-Benutzer mit sudo-Rechten angemeldet.
Aufgaben in Laravel planen
Geplante Aufgaben in Laravel sind automatisierte Prozesse, die in festgelegten Intervallen ausgeführt werden. Diese Aufgaben können Artisan-Befehle oder Funktionen sein, die automatisch innerhalb deiner Laravel-Anwendung ausgeführt werden. Folge den nachstehenden Schritten, um eine neue geplante Aufgabe zu erstellen und deren Ausführung zu überprüfen.
Schritt 1: Zum Laravel-Projektverzeichnis wechseln
$ cd /var/www/laravelapp
Schritt 2: Verzeichnisbesitz überprüfen
$ ls -l
Beispielausgabe:
drwxr-xr-x  6 www-data www-data   4096 Apr 23 20:57 app/
-rwxr-xr-x  1 www-data www-data    425 Apr 23 20:57 artisan*
drwxr-xr-x  3 www-data www-data   4096 Apr 23 20:57 bootstrap/
-rw-r--r--  1 www-data www-data   2419 Apr 23 20:57 composer.json
-rw-r--r--  1 www-data www-data 297315 Apr 23 20:57 composer.lock
drwxr-xr-x  2 www-data www-data   4096 Apr 23 20:57 config/
...
Die Gruppe www-data besitzt das Verzeichnis /var/www/laravelapp, wodurch Benutzer dieser Gruppe Zugriff auf die Projektdateien haben.
Schritt 3: Aktuellen Benutzer prüfen
$ whoami
Beispielausgabe:
linuxuser
Schritt 4: Benutzer zur Gruppe www-data hinzufügen
Ersetze linuxuser durch deinen tatsächlichen Benutzernamen, um Zugriff auf das Laravel-Verzeichnis zu erhalten.
$ sudo usermod -a -G linuxuser www-data
Schritt 5: Besitzrechte des Verzeichnisses ändern
$ sudo chown -R linuxuser:www-data /var/www/laravelapp
Schritt 6: Aktuelles Arbeitsverzeichnis prüfen
$ pwd
Ausgabe:
/var/www/laravelapp
Schritt 7: Backup und Bearbeitung der Datei console.php
$ mv routes/console.php routes/console.php.ORIG
Erstelle anschließend eine neue Datei routes/console.php:
$ nano routes/console.php
Schritt 8: Eine geplante Aufgabe definieren
everySecond(); ?>
Diese Konfiguration schreibt jede Sekunde den aktuellen Zeitstempel in die Laravel-Protokolldatei.
Schritt 9: Laravel Scheduler ausführen
$ php artisan schedule:run
Beispielausgabe:
2025-04-14 20:44:07 Running [Callback] ......................... 7.64ms DONE
2025-04-14 20:44:08 Running [Callback] ......................... 0.32ms DONE
2025-04-14 20:44:09 Running [Callback] ......................... 0.34ms DONE
2025-04-14 20:44:10 Running [Callback] ......................... 0.35ms DONE
Die geplante Aufgabe läuft nun aktiv und funktioniert wie erwartet. Drücke Ctrl + C, um den Vorgang zu beenden.
Wiederverwendbare Laravel-Befehle erstellen
Artisan-Befehle in Laravel ermöglichen es Entwicklern, wiederverwendbare CLI-Operationen zu definieren, um wiederkehrende oder komplexe Aufgaben zu automatisieren. Diese Befehle können manuell ausgeführt oder zeitgesteuert geplant werden. Folge den Schritten unten, um einen eigenen Artisan-Befehl zu erstellen und zu testen.
Schritt 1: Den Befehl CacheClearCommand erstellen
$ php artisan make:command CacheClearCommand
Dadurch wird eine neue Befehlsdatei im Verzeichnis app/Console/Commands/ erstellt.
Schritt 2: Die generierte Datei bearbeiten
$ nano app/Console/Commands/CacheClearCommand.php
Schritt 3: Befehlslogik hinzufügen
info('Leere Anwendungscache...'); $exitCode = Artisan::call('cache:clear'); if ($exitCode === 0) { $this->info('Anwendungscache erfolgreich geleert!'); \Log::info('Anwendungscache geleert am ' . now()); } else { $this->error('Das Leeren des Anwendungscaches ist fehlgeschlagen.'); \Log::error('Fehler beim Leeren des Anwendungscaches am ' . now()); } return Command::SUCCESS; } } ?>
Dieser Code erstellt einen benutzerdefinierten Befehl mit dem Namen app:clear-cache, der den Anwendungscache leert und den Vorgang in storage/logs/laravel.log protokolliert.
Schritt 4: Den benutzerdefinierten Befehl testen
$ php artisan app:clear-cache
Beispielausgabe:
Leere Anwendungscache...
Anwendungscache erfolgreich geleert!
Dies bestätigt, dass der benutzerdefinierte Artisan-Befehl korrekt funktioniert.
Laravel Cron Jobs zur Befehlsplanung konfigurieren
Das Aufgabenplanungssystem von Laravel ermöglicht es, Befehle in festgelegten Abständen automatisch auszuführen. Befolge die folgenden Schritte, um den zuvor erstellten Befehl app:clear-cache alle zwei Sekunden auszuführen.
Schritt 1: Die Datei routes/console.php sichern
$ mv routes/console.php routes/console.php.bak
Schritt 2: Neue routes/console.php-Datei erstellen
$ nano routes/console.php
Schritt 3: Den Planungsbefehl hinzufügen
everyTwoSeconds(); ?>
Der obige Code plant den Befehl app:clear-cache so, dass er alle zwei Sekunden ausgeführt wird. Beachte, dass die Aufgabe nur dann läuft, wenn der Befehl schedule:run manuell oder über Cron gestartet wird.
Täglich
Schedule::command('app:clear-cache')->daily();
Führt den Befehl einmal täglich um Mitternacht aus.
Wöchentlich an einem bestimmten Tag und zur festgelegten Uhrzeit
Schedule::command('app:clear-cache')->weeklyOn(1, '8:00');
Startet die Aufgabe jeden Montag um 8:00 Uhr.
Stündlich
Schedule::command('app:clear-cache')->hourly();
Führt den Befehl jede Stunde einmal aus.
Alle fünf Minuten
Schedule::command('app:clear-cache')->everyFiveMinutes();
Führt den Befehl alle fünf Minuten aus.
Jede Minute
Schedule::command('app:clear-cache')->everyMinute();
Führt den Befehl jede Minute aus.
Benutzerdefinierter Cron-Ausdruck
Schedule::command('app:clear-cache')->cron('*/5 * * * 1-5');
Führt die Aufgabe alle fünf Minuten von Montag bis Freitag aus.
Ausgabe in eine Datei protokollieren
Schedule::command('app:clear-cache')
    ->daily()
    ->appendOutputTo(storage_path('logs/cleanup.log'));
Hängt die Ausgabe der Aufgabe nach der Ausführung an eine Protokolldatei an.
Aufgabenausgabe per E-Mail senden
Schedule::command('app:clear-cache')
    ->daily()
    ->emailOutputTo('admin@example.com');
Sendet die Ausgabe der Aufgabe an die angegebene E-Mail-Adresse.
Nur bei Fehler E-Mail senden
Schedule::command('app:clear-cache')
    ->daily()
    ->emailOutputOnFailure('admin@example.com');
Sendet nur dann eine E-Mail-Benachrichtigung, wenn die Aufgabe fehlschlägt.
Erweiterte Planungsmethoden
Laravel bietet erweiterte Methoden zur Aufgabenplanung, um die Ausführung von Tasks zu optimieren. Damit können Entwickler die Ausführungsregeln, Zeitfenster und das Verhalten der geplanten Jobs präzise steuern.
Überlappende Aufgaben verhindern
Schedule::command('app:clear-cache')->daily()->withoutOverlapping();
Verhindert, dass eine neue Aufgabe startet, bevor die vorherige abgeschlossen ist.
Nur auf einem Server ausführen
Schedule::command('app:clear-cache')->daily()->onOneServer();
Stellt sicher, dass die Aufgabe in Multi-Server-Umgebungen nur einmal ausgeführt wird.
Im Hintergrund ausführen
Schedule::command('app:clear-cache')->daily()->runInBackground();
Führt Aufgaben im Hintergrund aus, um andere Prozesse nicht zu blockieren.
Ausführung im Wartungsmodus
Schedule::command('app:clear-cache')->daily()->evenInMaintenanceMode();
Stellt sicher, dass Aufgaben auch im Wartungsmodus ausgeführt werden.
Bedingte Aufgabenausführung
Schedule::command('app:clear-cache')
    ->daily()
    ->when(function () {
        return \App\Models\User::count() > 100;
    });
Führt eine Aufgabe nur aus, wenn bestimmte Bedingungen erfüllt sind – z. B. wenn mehr als 100 Benutzer vorhanden sind.
Ausführung innerhalb bestimmter Zeiträume
Schedule::command('app:clear-cache')
    ->hourly()
    ->between('8:00', '17:00');
Stellt sicher, dass Aufgaben nur zwischen 8:00 Uhr und 17:00 Uhr ausgeführt werden.
Erfolgs- und Fehlerereignisse behandeln
Schedule::command('app:clear-cache')
    ->daily()
    ->onSuccess(function () {
        \Log::info('Cache erfolgreich geleert');
    })
    ->onFailure(function () {
        \Notification::route('mail', 'admin@example.com')
            ->notify(new \App\Notifications\TaskFailed('Cache Clear'));
    });
Definiert benutzerdefinierte Aktionen, die bei erfolgreicher oder fehlerhafter Ausführung eines Tasks ausgeführt.
Laravel Cron Jobs mit Cron automatisieren
Du kannst Laravel Cron Jobs über den Systemdienst cron automatisieren, indem du einen neuen Eintrag hinzufügst, der den Laravel Scheduler ausführt. Folge den nachstehenden Schritten, um Cron so zu konfigurieren, dass Laravel-Aufgaben automatisch ausgeführt werden.
Schritt 1: Crontab-Editor öffnen
$ crontab -e
Wähle bei der Abfrage deinen bevorzugten Texteditor, z. B. nano.
Schritt 2: Laravel Scheduler-Eintrag hinzufügen
Füge folgende Zeile hinzu, um den Laravel Scheduler jede Minute auszuführen:
* * * * * cd /var/www/laravelapp && php artisan schedule:run >> /dev/null 2>&1
Dieser Cron-Job startet den Laravel Scheduler jede Minute im Projektverzeichnis. Der Befehl php artisan schedule:run löst die geplanten Aufgaben aus, während die Ausgabe nach /dev/null umgeleitet wird, damit sie im Hintergrund still ausgeführt wird.
Schritt 3: Cron-Job überprüfen
Zeige alle aktiven Cron-Jobs deines Benutzers an, um zu prüfen, ob der Laravel-Eintrag vorhanden ist:
$ crontab -l
Beispielausgabe:
# m h  dom mon dow   command
* * * * * cd /var/www/laravelapp && php artisan schedule:run >> /dev/null 2>&1
Laravel Cron Jobs testen und validieren
Führe die folgenden Schritte aus, um sicherzustellen, dass dein Laravel Scheduler und die automatisierten Cron-Aufgaben korrekt funktionieren.
Schritt 1: Aktuelles Verzeichnis prüfen
$ pwd
Ausgabe:
/var/www/laravelapp
Schritt 2: Geplante Aufgaben auflisten
$ php artisan schedule:list
Beispielausgabe:
* * * * *  php artisan app:clear-cache ....................................................................... Has Mutex › Next Due: 58 seconds from now
Diese Ausgabe bestätigt den geplanten Befehl, die Ausführungszeit und den aktuellen Status.
Schritt 3: Laravel-Logdatei überwachen
Überwache die Logdatei, um zu prüfen, ob die Ausführung der geplanten Aufgaben ordnungsgemäß ist:
$ tail -f /var/www/laravelapp/storage/logs/laravel.log
Beispielausgabe bei aktivem Cron-Job:
[2025-04-14 20:14:00] local.INFO: Anwendungscache um 2025-04-14 20:14:00 geleert  
[2025-04-14 20:15:00] local.INFO: Anwendungscache um 2025-04-14 20:15:00 geleert  
[2025-04-14 20:16:00] local.INFO: Anwendungscache um 2025-04-14 20:16:00 geleert  
......................
Die Zeitstempel bestätigen die Ausführung von Laravel Scheduler. Drücke Ctrl + C, um die Überwachung zu beenden.
Fazit
Du hast nun erfolgreich Laravel Cron Jobs mit dem integrierten Scheduler konfiguriert und ihre Ausführung über den Systemdienst cron automatisiert. Mit dieser Einrichtung kannst du wiederkehrende Aufgaben wie Cache-Leerung oder Datenbereinigung effizient und zuverlässig zu festgelegten Zeiten durchführen. Weitere Informationen und fortgeschrittene Planungsoptionen findest du in der offiziellen Laravel-Dokumentation.


