For at overvåge et cron-job giver du det et heartbeat: en unik URL, som jobbet kalder, hver gang det er færdigt. En overvågningstjeneste forventer det kald med et fast interval. Kommer det ikke i tide, fordi jobbet ikke kørte, gik ned eller hang, får du en alarm. Det kræver én ekstra linje i din crontab.
Denne guide viser, hvordan heartbeats virker, hvordan du tilføjer et, og hvordan du vælger de rigtige indstillinger.
Hvorfor cron-jobs har brug for deres egen overvågning
Cron er pålidelig til at starte kommandoer og tavs om, hvad der sker bagefter. Fejler et backupscript kl. 02:00, går intet synligt i stykker. Websitet er stadig oppe, og oppetidstjekkene forbliver grønne. Du opdager det uger senere, når du skal bruge backuppen, og den ikke er der.
Typiske fejl, der sker i stilhed:
Serveren var nede eller ved at genstarte på det planlagte tidspunkt.
Crontab blev overskrevet under en deployment eller en servermigrering.
Kommandoen fejler under cron, fordi PATH eller andre miljøvariabler er anderledes end i din shell.
Scriptet kører, men hænger på en lås, et netværkskald eller en fuld disk.
Loginoplysninger er udløbet, så jobbet starter og afslutter med en fejl, som ingen læser.
Oppetidsovervågning kan ikke se noget af dette, fordi intet offentligt går i stykker. Et heartbeat virker omvendt: I stedet for at monitoren tjekker dit job, melder dit job sig hos monitoren.
Sådan virker et heartbeat
Du opretter en heartbeat-monitor og får en unik URL.
Du angiver, hvornår jobbet forventes at køre, som et interval, fx hver 24. time, eller som jobbets egen crontab-tidsplan, med lidt margin til langsomme kørsler.
Jobbet kalder URL’en med GET eller POST, når det er færdigt.
Kommer der ikke noget kald i tide, åbnes en hændelse, og alarmerne sendes.
Når det næste ping kommer, er heartbeatet oppe igen, og du får besked om det.
Uptimechecks cron-monitorer virker på den måde. De tager crontab-tidsplanen i din tidszone, accepterer start- og slut-ping på samme monitor, giver alarm, når en kørsel overskrider sin maksimale køretid, og kan registrere exitkoden og jobbets output. Alarmer går til e-mail, Slack, Microsoft Teams, Discord, Google Chat, Mattermost, Telegram, PagerDuty, ntfy, Pushover, webhooks og push-notifikationer på din telefon, på alle planer.
Sådan tilføjer du et heartbeat til en crontab
Lad os sige, at en backup kører hver nat kl. 02:30:
30 2 * * * /usr/local/bin/backup.sh
Tilføj pinget efter jobbet, kædet med &&, så det kun kører, når backuppen lykkes:
30 2 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 –retry 3 https://heartbeat.example.com/your-unique-id > /dev/null
Det gør curl-indstillingerne:
-f får curl til at fejle ved HTTP-fejl i stedet for at behandle dem som en succes.
-s holder den stille, og -S viser stadig fejl, hvis noget går galt.
-m 10 holder op med at vente efter 10 sekunder, så et langsomt netværk aldrig blokerer jobbet.
–retry 3 prøver igen ved korte netværksproblemer.
Brug den præcise URL fra din heartbeat-monitor i stedet for pladsholderen.
Ping inde fra et script
Ved længere scripts sætter du pinget i slutningen af selve scriptet, efter de trin, der betyder noget:
#!/usr/bin/env bash
set -euo pipefail
pg_dump northwind > /backups/northwind-$(date +%F).sql
gzip /backups/northwind-$(date +%F).sql
curl -fsS -m 10 –retry 3 https://heartbeat.example.com/your-unique-id > /dev/null
Med set -e stopper scriptet ved den første kommando, der fejler, så pinget kun sendes, når alt før det er gået godt.
Andre schedulere
Heartbeats er ikke begrænset til cron. Alt, der kan sende en HTTP-forespørgsel, kan pinge: systemd-timere, Windows Task Scheduler med PowerShells Invoke-WebRequest, et Kubernetes CronJob, en CI-pipeline eller en planlagt funktion i din applikation.
Sådan vælger du intervallet
Intervallet skal passe til tidsplanen: 24 timer for et natligt job, 1 time for et job, der kører hver time. Giv plads til den normale variation i, hvor lang tid jobbet tager. Tager en backup normalt 20 minutter, men nogle gange 50, undgår en ekstra times margin falske alarmer uden at skjule en reel fejl længe.
Start rummeligt, se på, hvor lang tid kørslerne faktisk tager i en uge eller to, og stram så op. Hvis din monitor accepterer selve crontab-udtrykket, som Uptimechecks gør, så indsæt tidsplanen og vælg serverens tidszone. De forventede tidspunkter følger så tidsplanen præcist, og marginen bliver en henstandsperiode.
Heartbeats sammenlignet med andre metoder
Der er andre måder at holde øje med planlagte job på, og de har alle huller:
E-mail fra cron. Cron kan e-maile output fra kommandoer, men kun når jobbet kører og giver output. Starter jobbet aldrig, kommer der ingen e-mail. De fleste af de e-mails bliver alligevel ikke læst.
Logovervågning. Nyttig til at finde fejl, men et job, der aldrig kørte, skriver ingen loglinje, du kan søge efter.
Tjek af resultater. Nogle teams tjekker, om en backupfil findes, eller om en tabel er blevet opdateret. Det virker, men kræver særskilte tjek for hvert job.
Et heartbeat virker på samme måde for alle job og fanger det tilfælde, de andre overser: jobbet, der slet ikke kørte.
Job, der kører længe
Ved job, der tager lang tid, fx store backups eller datamigreringer, pinger du både ved start og ved slut. Kommer start-pinget, men ikke slut-pinget, er jobbet hængt eller gået ned halvvejs. Så ved du, hvor du skal kigge, før du åbner en eneste logfil.
I Uptimecheck går begge ping til samme monitor: Kald URL’en med /start tilføjet, når jobbet begynder, og den almindelige URL, når det er færdigt. Tiden imellem registreres som køretiden, og har du sat en maksimal køretid, får du en alarm, når en kørsel tager længere tid.
Hvad der skal have et heartbeat
Ikke alle job har brug for et. Prioritér de job, hvor du først ville opdage en fejl senere:
Backup af databaser og filer.
Import og eksport af data, fx produktfeeds eller synkronisering med regnskabssystemet.
Fakturakørsler, fornyelser og faktureringsjob.
Job til fornyelse af certifikater.
Oprydning, der forhindrer en disk i at løbe fuld.
Generering af rapporter, som andre er afhængige af.
Giv hvert job sit eget heartbeat. Et fælles heartbeat fortæller dig, at noget ikke kørte, men ikke hvad.
Fejlfinding af et udeblevet heartbeat
Når en heartbeat-alarm kommer:
Tjek, om cron startede jobbet. Kig i cron- eller systemloggen.
Kør kommandoen manuelt som den samme bruger, cron bruger, og læs outputtet.
Tjek miljøet. Brug absolutte stier, eller sæt PATH øverst i crontab.
Tjek ressourcerne. En fuld disk eller opbrugt hukommelse stopper mange job. Serverovervågning viser disk, RAM og belastning på tidspunktet for fejlen.
Tjek udgående netværk. En ændring i firewallen kan blokere pinget, selvom jobbet virker. Kørte jobbet, men fejlede pinget, står curls fejl i jobbets output.
Send jobbets output til en logfil, så der altid er noget at læse:
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1 && curl -fsS -m 10 https://heartbeat.example.com/your-unique-id > /dev/null
Du kan også sende resultatet med pinget. I Uptimecheck rapporterer du, hvordan jobbet endte, ved at afslutte URL’en med exitkoden (/0 betyder succes, alt andet en fejl), og en POST-body gemmes som jobbets output og vises sammen med alarmen. Denne linje pinger ved start, kører jobbet og rapporterer dets exitkode og output:
30 2 * * * curl -fsS -m 10 –retry 3 -o /dev/null https://heartbeat.example.com/your-unique-id/start; /usr/local/bin/backup.sh > /tmp/backup.log 2>&1; curl -fsS -m 10 –retry 3 –data-binary @/tmp/backup.log -o /dev/null https://heartbeat.example.com/your-unique-id/$?
Tjekliste til overvågning af cron-jobs
Lav en liste over de planlagte job, der betyder noget, på alle servere.
Opret ét heartbeat pr. job.
Ping, når arbejdet er lykkedes, kædet med && eller i slutningen af et set -e-script.
Sæt intervallet efter tidsplanen, med margin til langsomme kørsler.
Log jobbets output til en fil.
Send alarmer til en kanal, som nogen læser, også om natten for kritiske job.
Gennemgå heartbeat-historikken efter deployments og servermigreringer.
Opsummering
Cron fortæller dig ikke, når et job fejler. Det gør et heartbeat. Én curl-linje pr. job gør fejl, der ellers sker i stilhed, til alarmer, og historikken viser dig præcis, hvornår hvert job sidst kørte.
Heartbeats er med på alle Uptimechecks planer sammen med overvågning af oppetid, SSL, domæner, DNS og servere. Prøv det gratis i 14 dage, uden kreditkort.