Cronjob-monitoring
voor gemiste runs.
Heartbeat-monitoring voor back-ups, rapporten en elke geplande taak. Elke job roept aan het eind zijn eigen URL aan, en je team krijgt een melding als een run uitblijft.
In elk abonnement, ook Free. Geen creditcard nodig.
Vertrouwd door teams waar uptime op één staat.
Lees klantverhalenZes manieren waarop een cronjob stil faalt. Elk ervan mist zijn ping.
Cronjob-monitoring maakt van stilte een melding. Elke job pingt Hyperping als hij draait, en een ping die niet op tijd binnenkomt, geldt als downtime. Het vangt wat logs niet kunnen: een job die nooit startte, schrijft helemaal geen fout weg.
- 0 2 * * * · rebooted at 01:58no ping by 02:30 · alert
De job die nooit startte
Een reboot, een container die niet terugkwam, een crontab die bij een redeploy verloren ging. Er draait niets, dus er wordt ook geen fout gelogd. De ontbrekende ping is het enige spoor, en dat is genoeg.
Zo werken healthchecks - backup.sh · exit 1&& curl skipped · alert
De job die crashte
Zet de ping met && achter het commando, en een run die met een fout eindigt, pingt nooit. Hyperping waarschuwt je zodra de respijtperiode voorbij is.
Alleen pingen bij succes - /start 02:00 · no end pingdeadline passed · alert
De job die blijft hangen
Een lock die nooit vrijkomt, een query die vastzit op een tabel. Ping /start als de job begint en de URL als hij klaar is: de duur van elke run wordt gelogd, en een run die nooit eindigt, mist zijn deadline.
Looptijd meten - 0 2 * * * · read as UTCcron mode · Europe/Paris
Het schema in de verkeerde tijdzone
Geef de healthcheck de eigen cron-expressie en tijdzone van de job. De deadline schuift mee met de zomertijd, dus een job die om 2:00 in Parijs draait, wordt om 2:00 in Parijs verwacht.
Cron-expressiegenerator - worker · last ping 47 min agoevery 15 min · alert
De worker die stilletjes stopte
Een queue-consumer, een sync-loop, een scheduler in Laravel of Rails. Alles wat in een loop draait, kan bij elke ronde pingen, en de eenvoudige modus waarschuwt zodra de pings uitblijven.
Eenvoudige modus - GitHub Actions · schedule offno ping · alert
De geplande workflow die ongemerkt uitging
GitHub schakelt geplande workflows in openbare repositories uit na 60 dagen zonder activiteit, en een CI-runner kan in de wachtrij blijven hangen. Een ping als laatste stap van de workflow laat je weten wanneer hij niet meer draait.
Voorbeeld voor GitHub Actions
Eén URL per job. Eén regel in je crontab.
Geen agent en geen SDK. Een healthcheck is een URL die je job aanroept, en Hyperping houdt de klok in de gaten.
- 1
Maak een healthcheck aan
Noem hem naar de job en geef hem het schema van de job: een interval, of dezelfde cron-expressie en tijdzone. Voeg een respijtperiode toe die iets langer is dan een normale run.
- 2
Ping de URL als de job klaar is
Een HEAD-, GET- of POST-request vanuit alles wat HTTP spreekt. Koppel hem in een crontab met
&&, zodat alleen een geslaagde run pingt. Voeg aan het begin/starttoe om te loggen hoe lang elke run duurt. - 3
Krijg een melding als een run uitblijft
Geen ping vóór het verwachte tijdstip plus de respijtperiode? Dan gaat de healthcheck offline: er opent een incident en je kanalen krijgen binnen enkele seconden een melding. De volgende ping sluit het af en stuurt een herstelmelding.
# Back up at 2:00 every night, ping Hyperping only if it succeeds
0 2 * * * /usr/local/bin/backup.sh && curl -fsS --retry 3 https://hc.hyperping.io/tok_8f3kq2Lm9xV4#!/bin/sh
set -e
# The run starts: its duration is measured from here
curl -fsS --retry 3 https://hc.hyperping.io/tok_8f3kq2Lm9xV4/start
pg_dump "$DATABASE_URL" | gzip > /backups/db-$(date +%F).sql.gz
# The run ends: Hyperping logs the duration and the next deadline
curl -fsS --retry 3 https://hc.hyperping.io/tok_8f3kq2Lm9xV4await sendInvoices();
// Ping at the end of the job
await fetch("https://hc.hyperping.io/tok_8f3kq2Lm9xV4");import requests
build_report()
# Ping at the end of the job
requests.get("https://hc.hyperping.io/tok_8f3kq2Lm9xV4", timeout=10)use Illuminate\Support\Facades\Schedule;
// Laravel pings /start before the run, and the URL only if it succeeds
Schedule::command("backup:run")
->dailyAt("02:00")
->timezone("Europe/Paris")
->pingBefore("https://hc.hyperping.io/tok_8f3kq2Lm9xV4/start")
->pingOnSuccess("https://hc.hyperping.io/tok_8f3kq2Lm9xV4");func main() {
if err := syncInventory(); err != nil {
// No ping: Hyperping alerts once the grace period runs out
log.Fatal(err)
}
// Ping at the end of the job
client := http.Client{Timeout: 10 * time.Second}
if _, err := client.Get("https://hc.hyperping.io/tok_8f3kq2Lm9xV4"); err != nil {
log.Printf("ping failed: %v", err)
}
}on:
schedule:
- cron: "0 2 * * *"
jobs:
backup:
runs-on: ubuntu-latest
steps:
- run: ./backup.sh
- run: curl -fsS --retry 3 https://hc.hyperping.io/tok_8f3kq2Lm9xV4apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-report
spec:
schedule: "0 6 * * *"
timeZone: "Europe/Paris"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: report
image: ghcr.io/acme/report:latest
command: ["/bin/sh", "-c"]
args: ["./report.sh && curl -fsS https://hc.hyperping.io/tok_8f3kq2Lm9xV4"]# Started every night by backup.timer (OnCalendar=*-*-* 02:00:00)
[Unit]
Description=Nightly database backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
# Runs only if ExecStart exited with success
ExecStartPost=/usr/bin/curl -fsS --retry 3 https://hc.hyperping.io/tok_8f3kq2Lm9xV4# Run the job's container, ping only if it exits with code 0
0 2 * * * docker run --rm --env-file /etc/backup.env ghcr.io/acme/backup:latest && curl -fsS --retry 3 https://hc.hyperping.io/tok_8f3kq2Lm9xV4
# Same with a Compose service
0 3 * * * cd /srv/app && docker compose run --rm report && curl -fsS --retry 3 https://hc.hyperping.io/tok_8f3kq2Lm9xV4# Windows Task Scheduler action: powershell.exe -File C:\jobs\export-orders.ps1
& C:\jobs\export-orders.exe
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
# Ping at the end of the job
Invoke-RestMethod -Uri "https://hc.hyperping.io/tok_8f3kq2Lm9xV4" -TimeoutSec 10Eenvoudig of cron. In de eigen tijdzone van de job.
Een healthcheck weet wanneer de volgende run verwacht wordt, dus hij meldt de run die niet plaatsvond, niet pas uren later als iemand het opmerkt.
- 1
Eenvoudige modus, voor loops en workers
Verwacht een ping om de zoveel minuten, uren of dagen, vanaf 1 minuut. De klok begint bij elke ping opnieuw, wat past bij workers en syncs die in een loop draaien.
- 2
Cron-modus, voor geplande jobs
Plak de expressie van vijf velden van de job en kies de tijdzone. Elke run wordt verwacht op het moment dat cron hem zou starten, inclusief weekenden en de overgang naar zomer- en wintertijd. Twijfel je over de syntax? Gebruik de cron-expressiegenerator.
- 3
Respijt voor trage runs
Hoe lang er na het verwachte tijdstip wordt gewacht voordat er een melding uitgaat: 10 minuten, tenzij je dat aanpast. Een back-up die meestal 4 minuten duurt, kan er 30 krijgen, zodat niemand wordt opgeroepen voor een trage nacht.
- Mode
- Simple
- Every
- 15 minutes
- Grace period
- 5 minutes
- Last ping
- Oct 6, 09:14:58
- Down if no ping by
- Oct 6, 09:34:58
- Oct 6, 09:29:58 · next ping expected
- Oct 6, 09:34:58 · end of grace period
In de eenvoudige modus begint de klok bij elke ping opnieuw: 15 minuten tot de volgende, plus 5 minuten respijt. Een worker die niet meer pingt, wordt 20 minuten na zijn laatste ronde gemeld.
- Mode
- Cron
- Expression
- 0 2 * * *
- Timezone
- Europe/Paris
- Grace period
- 30 minutes
- Down if no ping by
- Oct 7, 02:30 CEST
- Wed, Oct 7 · 02:00 CEST
- Thu, Oct 8 · 02:00 CEST
- Fri, Oct 9 · 02:00 CEST
In de cron-modus volgt de deadline de expressie, niet de laatste ping. Een back-up die vannacht om 02:04 pingt, wordt morgen nog steeds om 02:00 verwacht, met 30 minuten respijt.
- Mode
- Cron
- Expression
- 0 9 * * 1-5
- Timezone
- America/New_York
- Grace period
- 15 minutes
- Down if no ping by
- Nov 2, 09:15 EST
- Mon, Nov 2 · 09:00 EST
- Tue, Nov 3 · 09:00 EST
- Wed, Nov 4 · 09:00 EST
Het rapport van vrijdag pingde om 09:02. In het weekend wordt niets verwacht, dus gaat er geen melding uit, en de klokwissel op 1 november verschuift de run van maandag niet: de tijdzone doet het rekenwerk.
- Mode
- Cron
- Expression
- 0 0 1 * *
- Timezone
- UTC
- Grace period
- 2 hours
- Down if no ping by
- Nov 1, 02:00 UTC
- Sun, Nov 1 · 00:00 UTC
- Tue, Dec 1 · 00:00 UTC
- Fri, Jan 1 · 00:00 UTC
Een maandelijkse job is de job die wekenlang niemand opvalt. Een respijtperiode van twee uur laat ruimte voor een trage run en slaat toch alarm, lang voordat iemand vraagt waar de facturen blijven.
Een gemiste run is een incident. Je team hoort het als eerste.
Healthchecks worden om de paar seconden getoetst aan hun deadline, dus de melding gaat uit zodra de respijtperiode afloopt, en het incident staat in dezelfde lijst als je andere monitors.
- Onlinepinged on schedule
De laatste run pingde op tijd. De volgende deadline volgt uit het schema: de volgende ping in de eenvoudige modus, de volgende cron-run in de cron-modus.
- Respijtdue, no ping yet
De run is verwacht en heeft nog niet gepingd. De healthcheck blijft up en er gaat niets weg tot het respijt afloopt, dus een job die een paar minuten uitloopt blijft stil.
- Offlinemissed its scheduled ping
De respijtperiode is voorbij. Er opent een incident, elk kanaal krijgt tegelijk een melding, en de healthcheck blijft offline tot de job weer pingt: één melding per gemiste run, niet één per minuut.
- Hersteldback on schedule
De volgende ping sluit het incident en stuurt een herstelmelding via dezelfde kanalen. Meldingen in PagerDuty en Opsgenie sluiten vanzelf.
Waar je team werkt.Overal tegelijk, zodra hij te laat is.
E-mail en SMS bereiken elk lid van het project, Slack, Discord en Telegram de kanalen die je hebt gekoppeld. Stuur de melding naar PagerDuty of Opsgenie om daar de piketdienst op te roepen.
Slack
PagerDuty
Opsgenie
Discord
Telegram
- SMS
Naast je uptimechecks. Op dezelfde statuspagina.
Healthchecks staan in hetzelfde account als je monitors, incidenten en statuspagina’s, dus een gemiste import en een trage API zie je in hetzelfde dashboard.
- Oct 06 02:48:21 · OK · 4m 09slast 20 pings kept
Elke run, gelogd
Elke ping legt het tijdstip, het IP-adres, de methode en de user agent vast, en de duur van de run als die met /start begon. Een grafiek over 24 uur toont de runs uur per uur.
Pinggeschiedenis - Nightly database backup · 99.93%uptime bars · status page
Op je statuspagina
Zet een healthcheck op een statuspagina, naast je websites en API’s. Klanten zien de import, de sync of het rapport als nog een dienst, online of offline, met de uptime erbij.
Statuspagina’s - 30 days · uptime · CSVweekly report email
In je rapporten
De uptime van een healthcheck wordt berekend uit zijn storingen, standaard over 30 dagen, is te exporteren naar CSV en staat in het wekelijkse rapport naast je monitors.
Rapportage
Healthchecks als code. Via de API, Terraform of je AI-agent.
- 1
Maak ze aan via de API
POST name, een cron-expressie en de timezone, of period_value en period_type, plus de respijtperiode. Het antwoord bevat de ping-URL die je aan je job meegeeft.
- 2
Of declareer ze in Terraform
De resource hyperping_healthcheck houdt de healthcheck van elke job naast de infrastructuur die hem draait, en geeft de ping-URL terug als gevoelige waarde.
- 3
Vraag je AI-agent of de back-up gedraaid heeft
De MCP-server toont je healthchecks met hun status, laatste ping en volgende deadline, zodat Claude, Cursor of een andere agent kan antwoorden op “zijn de jobs van vannacht gedraaid?”.
curl -X POST https://api.hyperping.io/v2/healthchecks \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Nightly database backup",
"cron": "0 2 * * *",
"timezone": "Europe/Paris",
"grace_period_value": 30,
"grace_period_type": "minutes"
}'resource "hyperping_healthcheck" "nightly_backup" {
name = "Nightly database backup"
cron = "0 2 * * *"
timezone = "Europe/Paris"
grace_period_value = 30
grace_period_type = "minutes"
}
output "backup_ping_url" {
value = hyperping_healthcheck.nightly_backup.ping_url
sensitive = true
}{
"uuid": "hc_Kq3vX9mPzL2wR8tY5nB7cD4f",
"name": "Nightly database backup",
"state": "up",
"last_ping_at": "2026-10-06T00:04:12.000Z",
"next_ping_due_at": "2026-10-07T00:00:00.000Z",
"down_if_no_ping_by": "2026-10-07T00:30:00.000Z",
"schedule": "cron '0 2 * * *' (Europe/Paris)",
"grace": "30 minutes"
}Een gids voor je scheduler. Waar de ping hoort, en hoe hij faalt.
Elke scheduler verbergt fouten op zijn eigen manier. Elke gids is een geteste setup: wat er misgaat, hoe je het ziet met de tools van de scheduler zelf, en de healthcheck die de gemiste run opvangt. Gidsen in het Engels.
Servers en platformen
- systemd-timersPersistent=true, tijdzones, alleen een ping bij succes.
- Windows TaakplannerEen mislukte taak die succes meldt.
- Kubernetes CronJobsGemiste schema’s en pods die in Pending blijven hangen.
- Geplande GitHub Actions-workflowsVertraagde runs en de automatische uitschakeling na 60 dagen.
- Vercel-cronjobsGeen retries, redirects en time-outs.
- Cloudflare Workers Cron TriggerswaitUntil, en 1 betekent zondag.
Frameworks en queues
- Laravel-schedulerpingOnSuccess of thenPing, en schedule:run.
- Geplande Rails-jobsSolid Queue, GoodJob en whenever.
- Node.js-cronjobsnode-cron, BullMQ en Agenda.
- Celery beatEen beat die publiceert zonder worker.
- Sidekiq-cronjobsRetries die de fout verbergen.
- pg_cronJobs die stoppen na een herstart of failover.
Jobs die niet stil mogen falen
Vergelijken
- Hyperping vs. CronitorEén abonnement in plaats van een prijs per monitor en per gebruiker.
- Hyperping vs. Healthchecks.ioDezelfde ping-URL’s, naast uptime en statuspagina’s.
- Hyperping vs. Sentry CronsGeen toeslag per cronmonitor bovenop een abonnement.
- Hyperping vs. Dead Man’s SnitchCron-expressies in de eigen tijdzone van elke job.
Een dienst die altijd moet antwoorden? Dat is uptime-monitoring.
Healthchecks wachten tot je jobs zich melden. Uptime-monitors roepen je websites en API’s tot elke 30 seconden aan, vanuit maximaal 17 regio’s. De meeste teams gebruiken beide, in hetzelfde abonnement.
Wat 50 of 500 jobs kosten. Gratis abonnementen inbegrepen.
Monitor je alleen cronjobs, dan is Healthchecks.io goedkoper. Hyperping loont als hetzelfde abonnement ook je websites en API’s bewaakt en je statuspagina draait: healthchecks tellen mee in de monitors van het abonnement, er wordt niets per job gerekend, en Essentials bevat 3 gebruikers.
| MaandprijsUSD, maandelijkse facturatie, één gebruiker | HyperpingHealthchecks tellen als monitors | Healthchecks.ioCron-monitoring, open source | CronitorGefactureerd per monitor en per gebruiker |
|---|---|---|---|
| Gratis abonnement | 20 jobsGedeeld met de uptime-monitors | 20 jobsHobbyist | 5 jobsHacker, 1 gebruiker |
| 50 jobs | $29Essentials, $24 bij jaarlijkse betaling | $20Business, tot 100 jobs | $10550 × $2, plus $5 per gebruiker |
| 500 jobs | $299Business, $249 bij jaarlijkse betaling | $80Business Plus, tot 1.000 jobs | $1,005500 × $2, plus $5 per gebruiker |
| Ook in de prijs | Uptime-monitors, statuspagina’s, piketdienst voor monitorsBinnen hetzelfde aantal monitors | Alleen cron-monitoringOpen source, gratis zelf te hosten | Uptime-checks, statuspaginaOok per monitor gefactureerd |
Prijzen gecontroleerd op 8 oktober 2026 op de prijspagina van elke aanbieder. Alle tools en hun limieten naast elkaar: de beste tools voor cronjob-monitoring (in het Engels).
Wat teams zeggen over Hyperping.

@hyperping is echt geweldig

Binnen ons bedrijf staat Hyperping erom bekend dat het sneller reageert dan Datadog. We krijgen meldingen van Hyperping meestal eerder dan van Datadog.

We kozen voor Hyperping om onze gebruikers een hoogwaardig dashboard voor incidenten en statusrapportage te bieden.

We krijgen realtime meldingen van Hyperping als de app plat ligt. Die komen soms zelfs binnen voordat AWS het merkt of ons waarschuwt.

We kunnen ons niet meer voorstellen dat we ons SaaS-bedrijf zonder Hyperping zouden runnen.

Hyperping scoort op alle fronten: van een soepele setup tot gemoedsrust en attente klantenservice.
Vragen over cronjob-monitoring.
Wat is cronjob-monitoring?
Cronjob-monitoring controleert of geplande taken echt draaien. Elke job pingt een unieke URL als hij klaar is, en de monitoringdienst waarschuwt je als een ping niet op tijd binnenkomt. Het vangt wat logs niet kunnen: een job die nooit startte, schrijft helemaal geen fout weg. Hyperping noemt deze monitors healthchecks.
Hoe monitor ik een cronjob?
Maak een healthcheck aan met het schema van de job, als interval of als cron-expressie met tijdzone, en een respijtperiode. Kopieer de ping-URL en voeg aan het eind van de job een request toe, bijvoorbeeld && curl -fsS gevolgd door de URL in je crontab. Komt de ping niet binnen vóór het verwachte tijdstip plus de respijtperiode, dan waarschuwt Hyperping je.
Wat is heartbeat-monitoring, of een dead man’s switch?
Hetzelfde idee onder andere namen. In plaats van dat een monitor je dienst controleert, stuurt je job bij elke run een signaal, de heartbeat, en de melding gaat af zodra dat signaal wegvalt. Het past bij alles zonder URL om te controleren: cronjobs, back-ups, queue-workers, ETL-pipelines en geplande CI-workflows.
Komt u van de heartbeats in Opsgenie?
Opsgenie stopt op 5 april 2027, heartbeats inbegrepen. Elke heartbeat wordt een healthcheck met hetzelfde interval, en de ping-URL ervan vervangt de Opsgenie-ping in uw job. Eén verschil: een gemiste run alarmeert alle kanalen tegelijk in plaats van via uw on-callrooster te lopen. Moet er iemand gewekt worden, stuur de healthcheck-alerts dan naar PagerDuty. De migratiegids voor Opsgenie bevat een script dat ze allemaal opnieuw aanmaakt.
Hoe weet ik of een cronjob is mislukt?
Ping alleen als de job slaagt: zet in een shell het request met && achter het commando, en roep in code de URL aan als het werk klaar is. Een job die crasht, met een fout eindigt of nooit start, stuurt dan niets, en Hyperping waarschuwt je zodra de respijtperiode voorbij is. Hyperping slaat de exitcode en de output van de job niet op, dus bewaar je logs voor het waarom.
Wat is een respijtperiode bij cron-monitoring?
Dat is hoe lang Hyperping na het verwachte tijdstip wacht voordat er een melding uitgaat. Een back-up die om 2:00 gepland staat met een respijtperiode van 30 minuten, mag pingen tot 2:30. Stel hem iets ruimer in dan de gebruikelijke duur van de job, zodat niemand wordt opgeroepen voor een trage run. Hij begint bij 1 minuut en staat in het dashboard standaard op 10 minuten.
Begrijpt Hyperping cron-expressies en tijdzones?
Ja. Geef een healthcheck in de cron-modus de expressie van vijf velden van de job, zoals 0 9 * * 1-5, en de tijdzone, zoals America/New_York. Hyperping berekent daaruit elke verwachte run, dus weekenden zonder runs geven geen melding en de overgang naar zomer- of wintertijd gaat vanzelf goed. Stel een expressie op of controleer hem met de cron-expressiegenerator.
Kan ik zien hoe lang mijn cronjobs duren?
Ja. Ping de URL met /start erachter als de job begint, en de gewone URL als hij eindigt. De geschiedenis van de healthcheck toont de duur van elke run, met het tijdstip, het IP-adres, de methode en de user agent van elke ping. Een run die start maar nooit eindigt, mist zijn deadline en geeft een melding, net als een gemiste run.
Kan ik Kubernetes CronJobs, GitHub Actions of geplande taken in Windows monitoren?
Ja. Alles wat een HTTP-request kan doen, kan een healthcheck pingen: curl of wget in een crontab, een systemd-timer of een Kubernetes CronJob, een stap aan het eind van een workflow in GitHub Actions of GitLab CI, Invoke-WebRequest in een geplande taak in Windows, of een request vanuit je code in een scheduler van Laravel, Rails, Django of Node.js.
Wat is het verschil tussen cronjob-monitoring en uptime-monitoring?
Uptime-monitoring controleert een dienst van buitenaf: Hyperping roept je website of API tot elke 30 seconden aan en waarschuwt als die niet meer antwoordt. Cronjob-monitoring werkt andersom: je job roept Hyperping aan, en stilte is de storing. De meeste teams hebben beide nodig, en Hyperping draait ze naast elkaar. Zie uptime-monitoring.
Is cronjob-monitoring gratis?
Healthchecks zitten in elk abonnement, ook in het gratis abonnement. Elke healthcheck telt als een van de monitors van je abonnement: 20 bij Free, 50 bij Essentials, 250 bij Pro en 1.000 bij Business, gedeeld met je uptimechecks. Zie de prijzen.
Hoe verhoudt Hyperping zich tot Cronitor of Healthchecks.io?
Cronitor gaat dieper in op analyses van jobs, en Healthchecks.io is open source en gratis te self-hosten. Hyperping houdt cron-monitoring bij elkaar met uptimechecks, statuspagina’s en incidenten, in één account. Zie Hyperping vs. Cronitor en Hyperping vs. Healthchecks.io, of alle tools naast elkaar in de beste tools voor cronjob-monitoring.


