✦ Oplossingen · Website & hosting

Cronjob draait niet: zo vind je waarom

Je geplande taak (cronjob) wordt niet uitgevoerd of doet niets? Meestal een pad, een andere PHP-versie, ontbrekende omgevingsvariabelen of uitvoer die nergens heen gaat. Zo spoor je het op.

Waarom gebeurt dit?

Cron voert opdrachten uit op vaste tijden, maar in een kale omgeving: een beperkte PATH, een andere werkmap en zonder je eigen shell-instellingen. Een opdracht die in je terminal werkt, kan in cron daardoor stilletjes falen.

Omdat de uitvoer van cron standaard naar een mailbox gaat die niemand leest (of nergens), merk je dat vaak pas als een taak dagen niets heeft gedaan.

Zo los je het op, stap voor stap

Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.

  1. Controleer de regel en de tijd

    Bekijk de crontab en controleer de vijf tijdvelden (minuut, uur, dag, maand, weekdag). Cron gebruikt de tijdzone van de server.

    crontab -l
    # voorbeeld: elke dag om 03:15
    15 3 * * * /usr/bin/php /var/www/site/taak.php
  2. Gebruik volledige paden

    Schrijf het volledige pad naar php en naar het script. Welke php cron gebruikt, zie je met which.

    which php
    /usr/bin/php -v
  3. Schrijf de uitvoer naar een log

    Laat elke run zijn uitvoer en fouten in een bestand zetten, zodat je kunt zien wat er gebeurt.

    15 3 * * * /usr/bin/php /var/www/site/taak.php >> /var/log/taak.log 2>&1
  4. Kijk of cron het überhaupt startte

    Het systeemlog laat zien of cron de opdracht uitvoerde.

    grep CRON /var/log/syslog | tail -n 20
    # of: journalctl -u cron --since today
  5. Controleer werkmap, rechten en gebruiker

    Gebruikt het script relatieve paden, zet dan een cd in de regel of gebruik __DIR__ in het script. Draait de cron als een andere gebruiker dan de website, dan kunnen bestandsrechten verschillen.

  6. WordPress: wp-cron is geen echte cron

    WP-Cron draait alleen als er een bezoeker komt. Op rustige sites lopen taken daardoor achter. Zet een echte cronjob en schakel de bezoek-gestuurde variant uit.

    // wp-config.php
    define( 'DISABLE_WP_CRON', true );
    
    # crontab, elke 5 minuten
    */5 * * * * cd /var/www/site && /usr/bin/php wp-cron.php > /dev/null 2>&1

Lukt het niet? Wij helpen

Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.

Aanvraag

Hulp aanvragen

Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.

Veelgestelde vragen

Vragen over dit probleem

De taak werkt handmatig wel.

Dan verschilt de omgeving: PATH, PHP-versie, werkmap of gebruiker. Log de uitvoer en vergelijk.

Er staat een % in mijn cronregel.

In crontab betekent % een nieuwe regel; schrijf hem als \%. Een veelvoorkomende oorzaak bij date-opdrachten.

Kan een cronjob twee keer tegelijk lopen?

Ja, als een run langer duurt dan het interval. Gebruik flock om dat te voorkomen: flock -n /tmp/taak.lock /usr/bin/php taak.php.