Definiere deine Jobs im Laravel-Scheduler und lasse einen System-Cron jede Minute php artisan schedule:run ausführen. Den Rest übernimmt Laravel – inkl. Taktung, Überlappungsschutz und Cluster-Locking.
Warum Cron + Laravel-Scheduler?
- Ein Cron-Eintrag für alles: Statt zig einzelne Cronjobs zu pflegen, erledigt Laravel die Aufgaben zentral. Du brauchst auf dem Server nur einen Cron, der minütlich den Scheduler triggert.
- Mehr Komfort: Lesbare Intervalle (
->dailyAt('06:30'),->weeklyOn(1, '08:00')) oder frei per->cron('...').
Schritt 1: Ein kleines Ziel definieren
Beispiel: Täglicher Report als E-Mail oder Logeintrag.
php artisan make:command SendDailyReport
app/Console/Commands/SendDailyReport.php:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class SendDailyReport extends Command
{
protected $signature = 'report:send';
protected $description = 'Sendet den täglichen Report';
public function handle(): int
{
// Hier deine Business-Logik (Mail, Export, API, ...)
Log::info('Daily report sent at '.now()->toDateTimeString());
return self::SUCCESS;
}
}
Schritt 2: Im Laravel-Scheduler einplanen
Ab Laravel 11/12 wird Scheduling typischerweise in routes/console.php definiert (ältere Projekte nutzen oft app/Console/Kernel.php). Beide Wege funktionieren. laravel.com
routes/console.php:
<?php
use Illuminate\Support\Facades\Schedule;
// Täglich um 06:30 Uhr (Serverzeit)
Schedule::command('report:send')->dailyAt('06:30');
Pro-Tipps:
->timezone('Europe/Berlin')setzen, wenn die Ausführungszeit an die lokale Zeit gekoppelt sein soll (z. B. operatives Reporting).->runInBackground()für Prozesse, die Output nicht in die Konsole schreiben müssen.
Schritt 3: System-Cron einmalig einrichten
Ubuntu/Debian (als Root):
sudo crontab -e
Dann einen Eintrag hinzufügen (Pfad anpassen!):
* * * * * cd /var/www/app && php artisan schedule:run
Praxisbeispiele (Copy-&-Paste)
1) Wöchentlich montags 08:00 Uhr:
Schedule::command('report:send')->weeklyOn(1, '08:00');
2) Alle 15 Minuten, nur in Production:
Schedule::command('invoices:sync')
->everyFifteenMinutes()
->when(fn() => app()->isProduction());
3) Eigene Shell-Skripte via Scheduler:
Schedule::exec('/usr/local/bin/backup.sh')->dailyAt('02:30');
4) Mit fester Zeitzone (Ausführung 06:30 Berlin-Zeit):
Schedule::command('report:send')
->dailyAt('06:30')
->timezone('Europe/Berlin');
Cron-Cheatsheet (mini)
* * * * *= minütlich0 * * * *= stündlich zur vollen Stunde0 6 * * *= täglich 06:000 8 * * 1= montags 08:00*/5 * * * *= alle 5 Minuten
Fazit
Mit einem Cron-Eintrag und dem Laravel-Scheduler automatisierst du Reports, Syncs, Aufräum-Jobs & Co. zuverlässig – lesbar im Code und problemlos clusterfähig. Wenn du’s möglichst schlank halten willst: einen Cron pro Projekt, der minütlich schedule:run ausführt – fertig.
Wenn du Fragen zur Einrichtung des Laravel-Schedulers hast oder Unterstützung bei der Umsetzung deiner Automatisierungen mit Cronjobs brauchst, schau gerne auf unserer Website vorbei oder nimm direkt Kontakt mit uns auf – wir helfen dir dabei, deine Abläufe zuverlässig, skalierbar und übersichtlich zu gestalten. Bei weiteren programmiertechnischen Fragen wirf auch einen Blick auf unsere anderen Artikel – vielleicht ist genau das Thema dabei, das dich bei deinem nächsten Projekt weiterbringt.