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 inroutes/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 inroutes/console.php.
Het kan ook via de withSchedule-methode in bootstrap/app.php.
Soorten planbare taken
Artisan-commando’s plannen
Met decommand-methode plan je Artisan-commando’s in.
Je kunt ze opgeven via de commandonaam of de klassenaam.
Queue-jobs plannen
Met dejob-methode plan je queue-jobs in.
Een handige manier om jobs op de queue te zetten zonder een closure te gebruiken.
Shell-commando’s plannen
Met deexec-methode voer je OS-commando’s uit.
Closures plannen
Met decall-methode plan je een willekeurige PHP-closure in.
__invoke-methode doorgeven.
De frequentie instellen
Belangrijkste frequentiemethoden
Hieronder de meest gebruikte frequentiemethoden.Rechtstreeks een cron-expressie opgeven
Met decron-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 detimezone-methode geef je per taak een tijdzone op.
schedule_timezone in config/app.php.
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 deenvironments-methode beperk je de uitvoering tot bepaalde omgevingen.
Tijdsbeperkingen
Metbetween / 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. MetwithoutOverlapping laat je de volgende uitvoering wachten tot de vorige is afgerond.
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 metonOneServer een taak op slechts één server laten uitvoeren.
Flow van gedistribueerde uitvoering met onOneServer()
Taken groeperen
Wil je dezelfde instellingen op meerdere taken toepassen, dan kun je ze bundelen met degroup-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. MetrunInBackground voer je taken parallel op de achtergrond uit.
Onderhoudsmodus
Wanneer je applicatie in onderhoudsmodus staat, worden geplande taken niet uitgevoerd. Wil je een taak toch gedwongen laten draaien tijdens de onderhoudsmodus, gebruik danevenInMaintenanceMode.
Flow bij onderhoudsmodus
De scheduler pauzeren
Je kunt de scheduler pauzeren zonder code te wijzigen.evenWhenPaused.
Handig voor taken die ook tijdens onderhoud moeten blijven draaien, zoals healthchecks en systeemmonitoring.
Output afhandelen
Output naar een bestand
MetsendOutputTo sla je de output van een taak op in een bestand.
appendOutputTo voeg je de output toe aan een bestaand bestand.
Output per e-mail
MetemailOutputTo verstuur je de output van een taak per e-mail.
Hiervoor moet vooraf de mailconfiguratie van Laravel zijn ingesteld.
emailOutputOnFailure.
Taakhooks
Met de methodenbefore / after voer je logica uit vóór en na een taak.
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.
Uitvoeren tijdens lokale ontwikkeling
Lokaal kun je zonder cron de scheduler continu laten draaien met het commandoschedule:work.
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.schedule:run tot het einde van die minuut draaien om alle sub-minuuttaken te verwerken.
Om een lopende schedule:run te onderbreken tijdens een deployment, voeg je dit toe aan je deployscript: