Je job pingt een URL wanneer hij klaar is. Stilte voorbij de deadline is een storing — en geef je okokumo de crontab-regel, dan volgt de deadline het echte schema in plaats van een vast interval.
Een cronjob die luid crasht valt op. Een cronjob die niet meer wordt ingepland — de crontab-regel die verloren ging bij een servermigratie, de container die niet meer start, de queue-worker die door de OOM-killer is opgeruimd — levert geen fout, geen e-mail en geen logregel. Hij loopt simpelweg nooit meer, en je merkt het als iemand vraagt waarom de facturen niet zijn verstuurd.
Heartbeatmonitoring keert een HTTP-check om. In plaats van dat okokumo jouw dienst pollt, roept jouw job na elke geslaagde run een unieke ping-URL aan. Loopt het venster af, dan slaat okokumo alarm — want het ontbreken van het signaal is het signaal.
De simpele vorm is een periode met een respijtperiode: "verwacht elk uur een ping, sta tien minuten speling toe". Dat werkt tot het schema niet meer uniform is.
0 3 * * 1-5 — 3 uur op werkdagen — is 24 uur tussen maandag en dinsdag en 72 uur tussen
vrijdag en maandag. Eén vast interval kan dat niet beschrijven. Zet je het op 24 uur, dan wekt
het je elke zaterdagochtend; zet je het op 72, dan blijft een taak die dinsdag stil is gestopt
tot vrijdag onopgemerkt.
Daarom kan een cron-check de crontab-expressie zelf nemen, plus de IANA-tijdzone waarin de crontab van je server loopt. De deadline wordt de volgende geplande run plus de respijtperiode, na elke ping opnieuw berekend. Een taak die alleen op werkdagen loopt blijft het hele weekend stil, en een gemiste dinsdagrun wordt binnen zijn eigen respijtvenster gepakt.
Een crontab vuurt in de lokale tijd van zijn host. Een vaste UTC-offset schuift bij elke zomertijdwissel een uur op, en wel richting een valse melding — 03:00 in Parijs is 01:00 UTC in de winter en 02:00 UTC in de zomer. Elke check draagt zijn eigen zone, zodat servers in verschillende regio's het niet eens hoeven te worden.
Het formulier toont de volgende runs al terwijl je typt, elk met zijn offset. Een cron-expressie is makkelijk subtiel verkeerd te schrijven — de velden dag-van-de-maand en dag-van-de-week worden met OF gecombineerd, niet met EN, wat bijna iedereen één keer verrast — en een verkeerd schema betekent hier een gemiste melding, geen cosmetisch foutje.
Eén HTTP-request aan het eind van je job, vanuit alles dat er een kan doen:
curl aan het eind van een shellscript of een Docker-entrypoint.Ping nadat het werk is gelukt, niet aan het begin van het script. Een job die start, faalt en toch pingt, is een job die gezond meldt terwijl hij niets doet.
Het minimuminterval van je plan wordt getoetst aan de kleinste tussenruimte die de expressie
werkelijk oplevert, gemeten over de komende vijftig keren in plaats van beredeneerd. Zo wordt
* * * * * op Free net zo geweigerd als een interval van 60 seconden, en heeft een onregelmatig
schema geen uitzondering nodig.
E-mail, Telegram, Slack, Discord of een ondertekende webhook; routering per check of een organisatiestandaard; een bezorglog die toont wat is verzonden en wat is overgeslagen. Zo werkt alertering →