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.
Passende Infrastruktur bei centron
Zum Ausprobieren braucht es keine eigene Hardware: ccloud³ VMs mit vollem Root-Zugriff gibt es ab 3,12 € im Monat, stundengenau abgerechnet und in Sekunden bereit. Cloud Server mieten →
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/laravelappSchritt 2: Verzeichnisbesitz überprüfen
$ ls -lBeispielausgabe:
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
$ whoamiBeispielausgabe:
linuxuserSchritt 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-dataSchritt 5: Besitzrechte des Verzeichnisses ändern
$ sudo chown -R linuxuser:www-data /var/www/laravelappSchritt 6: Aktuelles Arbeitsverzeichnis prüfen
$ pwdAusgabe:
/var/www/laravelappSchritt 7: Backup und Bearbeitung der Datei console.php
$ mv routes/console.php routes/console.php.ORIGErstelle anschließend eine neue Datei routes/console.php:
$ nano routes/console.phpSchritt 8: Eine geplante Aufgabe definieren
<!--?php use Illuminate\Support\Facades\Schedule; Schedule::call(function () { \Log::info('Dies ist eine geplante Aufgabe, die um: ' . now() . ' ausgeführt wird.'); return 0; }) --->everySecond(); ?>Diese Konfiguration schreibt jede Sekunde den aktuellen Zeitstempel in die Laravel-Protokolldatei.
Schritt 9: Laravel Scheduler ausführen
$ php artisan schedule:runBeispielausgabe:
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 DONEDie 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 CacheClearCommandDadurch wird eine neue Befehlsdatei im Verzeichnis app/Console/Commands/ erstellt.
Schritt 2: Die generierte Datei bearbeiten
$ nano app/Console/Commands/CacheClearCommand.phpSchritt 3: Befehlslogik hinzufügen
<!--?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Artisan; class CacheClearCommand extends Command { protected $signature = 'app:clear-cache'; protected $description = 'Leert den Anwendungscache'; public function handle() { $this--->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-cacheBeispielausgabe:
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.bakSchritt 2: Neue routes/console.php-Datei erstellen
$ nano routes/console.phpSchritt 3: Den Planungsbefehl hinzufügen
<!--?php use Illuminate\Support\Facades\Schedule; Schedule::command('app:clear-cache')--->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 -eWä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>&1Dieser 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 -lBeispielausgabe:
# m h dom mon dow command
* * * * * cd /var/www/laravelapp && php artisan schedule:run >> /dev/null 2>&1Laravel 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
$ pwdAusgabe:
/var/www/laravelappSchritt 2: Geplante Aufgaben auflisten
$ php artisan schedule:listBeispielausgabe:
* * * * * php artisan app:clear-cache ....................................................................... Has Mutex › Next Due: 58 seconds from nowDiese 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.logBeispielausgabe 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.
Testen Sie Ihr Setup auf ccloud³
Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.