Skip to main content

Wat is taakplanning

Traditioneel moest je voor elke terugkerende taak op de server handmatig een cron-entry schrijven. Bij die aanpak staat de planningsdefinitie echter buiten je broncode: er is geen versiebeheer mogelijk en voor elke controle of wijziging moet je via SSH inloggen. Met de scheduler van Laravel kun je je planning vloeiend definiëren binnen je applicatie. Op de server volstaat één enkele cron-entry, en de planningsdefinitie wordt samen met je code onder versiebeheer gehouden. De standaardstijl is om de planning te definiëren in routes/console.php.
Met het Artisan-commando schedule:list bekijk je een overzicht van de gedefinieerde taken en hun volgende geplande uitvoertijd.

Uitvoeringsflow van de scheduler

Een planning definiëren

Je definieert de planning in routes/console.php. Het kan ook via de withSchedule-methode in bootstrap/app.php.

Soorten planbare taken

Artisan-commando’s plannen

Met de command-methode plan je Artisan-commando’s in. Je kunt ze opgeven via de commandonaam of de klassenaam.
Ook aan Artisan-commando’s die als closure zijn gedefinieerd, kun je direct na de definitie planningsmethoden koppelen.

Queue-jobs plannen

Met de job-methode plan je queue-jobs in. Een handige manier om jobs op de queue te zetten zonder een closure te gebruiken.
Je kunt ook de queuenaam en de verbinding opgeven.

Shell-commando’s plannen

Met de exec-methode voer je OS-commando’s uit.

Closures plannen

Met de call-methode plan je een willekeurige PHP-closure in.
Je kunt ook invocable objecten met een __invoke-methode doorgeven.

De frequentie instellen

Belangrijkste frequentiemethoden

Hieronder de meest gebruikte frequentiemethoden.

Rechtstreeks een cron-expressie opgeven

Met de cron-methode kun je ook rechtstreeks een cron-expressie opgeven.

Frequentie en weekdagen combineren

Door frequentiemethoden te combineren met weekdagbeperkingen maak je fijnmazigere planningen.

De tijdzone instellen

Met de timezone-methode geef je per taak een tijdzone op.
Wil je één gemeenschappelijke tijdzone voor alle taken, gebruik dan schedule_timezone in config/app.php.
Bij tijdzones met zomertijd kan een taak op het omschakelmoment twee keer worden uitgevoerd of juist helemaal niet. Gebruik waar mogelijk UTC.

Voorwaardelijke beperkingen

when / skip

when voert de taak alleen uit als de closure true teruggeeft. skip doet het omgekeerde: geeft de closure true terug, dan wordt de taak overgeslagen.

environments

Met de environments-methode beperk je de uitvoering tot bepaalde omgevingen.

Tijdsbeperkingen

Met between / unlessBetween beperk je de tijdvakken waarin de taak draait.

Weekdagbeperkingen

Overlap voorkomen

Standaard start de volgende uitvoering ook als de vorige taak nog bezig is. Met withoutOverlapping laat je de volgende uitvoering wachten tot de vorige is afgerond.
Je kunt ook de geldigheidsduur van de lock (in minuten) opgeven. De standaard is 24 uur.
withoutOverlapping beheert de locks via de cache van je applicatie. Loopt een taak door een onverwacht probleem vast, dan kun je de lock opheffen met schedule:clear-cache.

Uitvoering op meerdere servers beheersen

Draait de scheduler op meerdere servers, dan kun je met onOneServer een taak op slechts één server laten uitvoeren.
Voor deze functie moet de standaardcachedriver van je applicatie zijn ingesteld op database, memcached, dynamodb of redis, en moeten alle servers met dezelfde cacheserver verbonden zijn.

Flow van gedistribueerde uitvoering met onOneServer()

Taken groeperen

Wil je dezelfde instellingen op meerdere taken toepassen, dan kun je ze bundelen met de group-methode.

Uitvoeren op de achtergrond

Taken die op hetzelfde tijdstip gepland staan, worden standaard na elkaar uitgevoerd in de volgorde van definitie. Een langdurige taak vertraagt dan de start van de volgende taken. Met runInBackground voer je taken parallel op de achtergrond uit.
runInBackground is alleen te gebruiken met de methoden command en exec.

Onderhoudsmodus

Wanneer je applicatie in onderhoudsmodus staat, worden geplande taken niet uitgevoerd. Wil je een taak toch gedwongen laten draaien tijdens de onderhoudsmodus, gebruik dan evenInMaintenanceMode.

Flow bij onderhoudsmodus

De scheduler pauzeren

Je kunt de scheduler pauzeren zonder code te wijzigen.
Wil je tijdens een pauze bepaalde taken tóch laten doorlopen, gebruik dan evenWhenPaused. Handig voor taken die ook tijdens onderhoud moeten blijven draaien, zoals healthchecks en systeemmonitoring.

Output afhandelen

Output naar een bestand

Met sendOutputTo sla je de output van een taak op in een bestand.
Met appendOutputTo voeg je de output toe aan een bestaand bestand.

Output per e-mail

Met emailOutputTo verstuur je de output van een taak per e-mail. Hiervoor moet vooraf de mailconfiguratie van Laravel zijn ingesteld.
Wil je alleen bij een mislukking een e-mail versturen, gebruik dan emailOutputOnFailure.

Taakhooks

Met de methoden before / after voer je logica uit vóór en na een taak.
Hooks voor succes en falen definieer je met onSuccess / onFailure.

Deployen naar de server

1

De cron-entry toevoegen

Voeg slechts deze ene regel toe aan de crontab van je server en de Laravel-scheduler draait elke minuut.
Bewerken kan met het commando crontab -e.
2

De werking van de scheduler controleren

Bekijk de lijst met gedefinieerde taken en hun volgende uitvoertijd.
Met Laravel Cloud beheer je geplande taken zonder cron-configuratie.

Uitvoeren tijdens lokale ontwikkeling

Lokaal kun je zonder cron de scheduler continu laten draaien met het commando schedule:work.
Dit commando draait op de voorgrond en roept de scheduler elke minuut aan. Het blijft draaien totdat je stopt met Ctrl+C.

Sub-minuutplanning (frequenties onder één minuut)

Bij gewone cron is één minuut de kleinste eenheid, maar in Laravel kun je ook plannen op secondeniveau.
Als er sub-minuuttaken zijn gedefinieerd, blijft schedule:run tot het einde van die minuut draaien om alle sub-minuuttaken te verwerken.
Delegeer het werk van sub-minuuttaken bij voorkeur aan queue-jobs of achtergrondcommando’s. Als de taak zelf lang duurt, lopen de volgende sub-minuuttaken vertraging op.
Om een lopende schedule:run te onderbreken tijdens een deployment, voeg je dit toe aan je deployscript:

Veelgebruikte commando’s op een rij

Laatst gewijzigd op 6 september 2026