Een e-commercebedrijf ontdekt op een maandag dat er al twaalf dagen geen bestellingen naar het ERP zijn geëxporteerd. Het cron-script wordt uitgevoerd: correcte crontab-invoer, logbestand gedateerd vanochtend. In werkelijkheid mislukt de taak bij de SFTP-verbinding sinds een sleutelwijziging, maar de ontwikkelaar heeft stderr niet omgeleid, niemand controleert de exitcode en de gedeelde geeft geen melding .
Cronjobs zijn door hun ontwerp onzichtbaar. Ze draaien 's nachts, zonder dat er een gebruiker voor het scherm zit. Dit is precies de reden waarom ze meer zichtbaarheid vereisen dan een webpagina – en niet minder.
Anatomie van een productiecron
| Element | Slechte praktijk | Goede praktijk |
|---|---|---|
| Afsluiten | /dev/null | Gestructureerd log + rotatie |
| Mislukking | Genegeerd | Waarschuw bij uitgang ≠ 0 |
| Duur | Niet gemeten | Time-out + overschrijdingswaarschuwing |
| Concurrentie | Dubbele uitvoering | Flocklock / Redis |
| Idempotentie | Nee | Herspeelbaar zonder dubbel effect |
Een cron die “draait” zonder bewijs van zakelijk succes is niet uitgevoerd — hij heeft alleen maar CPU verbruikt.
Gedeeld versus VPS: waar verandert jouw nacht?
Gedeeld:
- Lage tijdnauwkeurigheid; overlap met aangrenzende banen.
- cron
mail()vaak uitgeschakeld of spam gefilterd. - Geen geavanceerde systeemtimer.
VPS / cloud:
- systemd-timers met
Persistent=true(gemiste inhaalactie). - Gecentraliseerde journaallogboeken.
- Toegewijde werknemers voor zware klussen.
Voor het synchroniseren van facturering of aandelen is gedeeld een gok. Voor wekelijks opschonen van de cache is acceptabel.
Minimaal waarneembaar patroon
- Wikkelomhulsel:
#!/bin/bash
set -euo pipefail
LOG=/var/log/jobs/export-erp.log
{
echo "=== $(datum -Is) start ==="
/usr/bin/php /app/bin/export-erp.php
echo "=== $(datum -Is) ok ==="
} >> "$LOG" 2>&1 || curl -fsS -m 10 --probeer 3 https://hc.example/ping/xxx-fail
- Healthchecks.io / Cronitor — ping START en SUCCES; waarschuwen bij afwezigheid.
- Duurstatistiek — Grafana of eenvoudig geparseerd logboek; waarschuwing indien > 2× mediaan.
- Runbook — link in waarschuwing naar handmatige procedure.
Zie Crontab en vergrendeling en Celery: voorkom dat een takenwachtrij een black box wordt.
Idempotence en sloten
Klassiek scenario: productimport duurt 25 minuten, cron elke 15 minuten → twee importen beschadigen de database.
Oplossingen:
- flock -n aan het begin van het script — overslaan als het al bezig is.
- Redis SET NX met TTL > maximale taakduur.
- PostgreSQL-adviesslot voor DB-gerichte taken.
Elke kritieke taak moet herspeelbaar zijn: herstart zonder het aantal schrijfbewerkingen te verdubbelen (UPSERT, batch_id marker).
Cron-migratie → wachtrij
| Signaal | Actie |
|---|---|
| Taak > 5 minuten | Werknemer + staart |
| Opnieuw proberen met uitstel | Selderij / Messenger |
| Afhankelijkheden tussen banen | Orchestrator (tijdelijk, luchtstroomlicht) |
| Teamzichtbaarheid | Dashboard Bloem / Horizon |
De cron is nog steeds nuttig voor triggering (0 2 * php bin/console messenger:consume) — niet om alles inline uit te voeren.
De top: cron-falen wordt altijd ontdekt door de beroepsgroep, nooit door technologie
De host verkoopt “inclusief cron”. Uw verantwoordelijkheid: succes of mislukking bewijzen, ongeacht de panelhosting.
Beslis en ga vooruit zonder blinde vlek
- Inventariseer alle crons (crontab + paneel + CI).
- Classificeer kritiek en voeg externe gezondheidscontrole toe aan beoordelingen.
- Vergrendel taken > 1 min of kort interval.
- Test mislukt vrijwillig – waarschuwing komt binnen < 5 minuten?
- Document-eigenaar en runbook per taak.
Vergelijk PaaS met waarneembare cron (Alwaysdata) via onze overzicht.
Veelgestelde vragen
Waarom zijn gedeelde crons onbetrouwbaar?
Onnauwkeurige vensters, gedeelde belasting, geen melding van fouten: riskant voor kritieke synchronisatie.
Hoe weet ik of een cron is mislukt?
Gelogde exitcode + externe ping of waarschuwing; zwijgen is geen succes.
Is een slot nodig om duplicaten te voorkomen?
Ja als taakduur ≥ interval — koppel, Redis of adviesslot.
Systeemcron of wachtrij?
Cron voor kort en zeldzaam; wachtrij + werknemers voor lang, opnieuw proberen en zichtbaarheid.
Een betrouwbare cron wordt 's nachts niet gezien; hij wordt 's ochtends bewezen of waarschuwt voordat het bedrijf het merkt.
