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

Schritt 2: Verzeichnisbesitz überprüfen

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

Beispielausgabe:

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

Ausgabe:

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:

Schritt 8: Eine geplante Aufgabe definieren

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

Schritt 3: Den Planungsbefehl hinzufügen

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

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:

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

Ausgabe:

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.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: