For å overvåke en cron-jobb gir du den en heartbeat: en unik URL som jobben kaller hver gang den er ferdig. En overvåkingstjeneste venter på den forespørselen med jevne mellomrom. Kommer den ikke i tide, fordi jobben ikke kjørte, krasjet eller hang seg opp, får du et varsel. Det krever én ekstra linje i crontab.
Denne guiden viser hvordan heartbeats fungerer, hvordan du legger til en og hvordan du velger riktige innstillinger.
Hvorfor cron-jobber trenger egen overvåking
Cron er pålitelig når det gjelder å starte kommandoer, og taus om hva som skjer etterpå. Feiler et backupskript klokken 02.00, er det ingenting synlig som går i stykker. Nettstedet er oppe, og oppetidssjekkene forblir grønne. Du oppdager det uker senere, når du trenger sikkerhetskopien og den ikke finnes.
Typiske stille feil:
Serveren var nede eller startet på nytt på det planlagte tidspunktet.
Crontab ble overskrevet under en utrulling eller en servermigrering.
Kommandoen feiler under cron fordi PATH eller andre miljøvariabler er annerledes enn i skallet ditt.
Skriptet kjører, men henger på en lås, et nettverkskall eller en full disk.
Påloggingsinformasjonen utløp, så jobben starter og avslutter med en feil ingen leser.
Oppetidsovervåking ser ingenting av dette, fordi ingenting offentlig går i stykker. En heartbeat fungerer motsatt vei: i stedet for at monitoren sjekker jobben din, melder jobben din seg hos monitoren.
Slik fungerer en heartbeat
Du oppretter en heartbeat-monitor og får en unik URL.
Du angir når jobben forventes å kjøre, som et intervall, for eksempel hver 24. time, eller som jobbens egen crontab-plan, med litt margin for trege kjøringer.
Jobben kaller URL-en med GET eller POST når den er ferdig.
Kommer det ingen forespørsel i tide, åpnes en hendelse og varsler sendes ut.
Når neste ping kommer, er heartbeaten oppe igjen, og du får beskjed om det.
Uptimechecks cron-monitorer fungerer slik. De tar crontab-planen i din tidssone, tar imot start- og slutt-ping på samme monitor, varsler når en kjøring overskrider maksimal kjøretid, og kan registrere avslutningskoden og jobbens utdata. Varsler går til e-post, Slack, Microsoft Teams, Discord, Google Chat, Mattermost, Telegram, PagerDuty, ntfy, Pushover, webhooks og push-varsler på mobilen, på alle planer.
Legg til en heartbeat i crontab
La oss si at en sikkerhetskopi kjører hver natt klokken 02.30:
30 2 * * * /usr/local/bin/backup.sh
Legg til pingen etter jobben, koblet med &&, så den bare kjører når sikkerhetskopien lykkes:
30 2 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 –retry 3 https://heartbeat.example.com/your-unique-id > /dev/null
Dette gjør curl-valgene:
-f får curl til å feile ved HTTP-feil i stedet for å behandle dem som suksess.
-s holder den stille, og -S viser likevel feil hvis noe går galt.
-m 10 slutter å vente etter 10 sekunder, så et tregt nettverk aldri blokkerer jobben.
–retry 3 prøver på nytt ved korte nettverksproblemer.
Bruk den nøyaktige URL-en fra heartbeat-monitoren din i stedet for plassholderen.
Ping fra et skript
For lengre skript legger du pingen på slutten av selve skriptet, etter trinnene som betyr noe:
#!/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 skriptet ved første kommando som feiler, så pingen sendes bare når alt før den har fungert.
Andre planleggere
Heartbeats er ikke begrenset til cron. Alt som kan sende en HTTP-forespørsel, kan pinge: systemd-timere, Windows Oppgaveplanlegging med PowerShells Invoke-WebRequest, en Kubernetes CronJob, en CI-pipeline eller en planlagt funksjon i applikasjonen din.
Velg intervallet
Intervallet bør følge planen: 24 timer for en nattlig jobb, 1 time for en jobb som kjører hver time. Legg inn margin for normal variasjon i hvor lang tid jobben tar. Tar en sikkerhetskopi vanligvis 20 minutter, men noen ganger 50, unngår en ekstra time margin falske alarmer uten å skjule en reell feil lenge.
Start romslig, se hvor lang tid kjøringene faktisk tar i en uke eller to, og stram deretter inn. Godtar monitoren selve crontab-uttrykket, slik Uptimechecks gjør, limer du inn planen og velger serverens tidssone. Da følger de forventede tidspunktene planen nøyaktig, og marginen blir en utsettelsesperiode.
Heartbeats sammenlignet med andre metoder
Det finnes andre måter å holde øye med planlagte jobber på, alle med hull:
E-post fra cron. Cron kan sende utdata fra kommandoer på e-post, men bare når jobben kjører og gir utdata. Starter jobben aldri, kommer det ingen e-post. De fleste slike e-poster blir uansett ikke lest.
Loggovervåking. Nyttig for å finne feil, men en jobb som aldri kjørte, skriver ingen logglinje å søke etter.
Sjekke resultater. Noen team sjekker om en backupfil finnes eller om en tabell er oppdatert. Det fungerer, men krever egne sjekker for hver jobb.
En heartbeat fungerer likt for alle jobber og fanger opp tilfellet de andre går glipp av: jobben som ikke kjørte i det hele tatt.
Jobber som tar lang tid
For jobber som tar lang tid, som store sikkerhetskopier eller datamigreringer, pinger du både ved start og ved slutt. Kommer startpingen, men ikke sluttpingen, hang jobben seg opp eller krasjet halvveis. Da vet du hvor du skal lete før du åpner en eneste loggfil.
I Uptimecheck går begge pingene til samme monitor: kall URL-en med /start lagt til når jobben begynner, og den vanlige URL-en når den er ferdig. Tiden imellom registreres som kjøretiden, og angir du en maksimal kjøretid, blir du varslet når en kjøring tar lengre tid.
Hva som bør få en heartbeat
Ikke alle jobber trenger en. Prioriter jobber der du først ville merket feilen senere:
Sikkerhetskopier av databaser og filer.
Dataimport og -eksport, som produktfeeder eller synkronisering med regnskapssystemet.
Fakturakjøringer, fornyelser og faktureringsjobber.
Jobber som fornyer sertifikater.
Opprydding som hindrer at en disk blir full.
Rapportgenerering som andre er avhengige av.
Gi hver jobb sin egen heartbeat. En felles heartbeat forteller deg at noe ikke kjørte, men ikke hva.
Feilsøk en heartbeat som uteble
Når et heartbeat-varsel kommer:
Sjekk om cron startet jobben. Se i cron- eller systemloggen.
Kjør kommandoen manuelt som samme bruker som cron bruker, og les utdataene.
Sjekk miljøet. Bruk absolutte stier, eller sett PATH øverst i crontab.
Sjekk ressursene. En full disk eller oppbrukt minne stopper mange jobber. Serverovervåking viser disk, RAM og last på tidspunktet for feilen.
Sjekk utgående nettverk. En endring i brannmuren kan blokkere pingen selv om jobben fungerer. Kjørte jobben, men pingen feilet, vises feilen fra curl i jobbens utdata.
Send jobbens utdata til en loggfil, så det alltid finnes noe å lese:
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 pingen. I Uptimecheck rapporterer du hvordan jobben endte ved å avslutte URL-en med avslutningskoden (/0 betyr suksess, alt annet en feil), og en POST-body lagres som jobbens utdata og vises sammen med varselet. Denne linjen pinger ved start, kjører jobben og rapporterer avslutningskoden og utdataene:
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/$?
Sjekkliste for overvåking av cron-jobber
List opp de planlagte jobbene som betyr noe, på alle servere.
Opprett én heartbeat per jobb.
Ping etter at arbeidet har lyktes, koblet med && eller på slutten av et set -e-skript.
Sett intervallet etter planen, med margin for trege kjøringer.
Logg jobbens utdata til en fil.
Send varsler til en kanal noen leser, også om natten for kritiske jobber.
Gå gjennom heartbeat-historikken etter utrullinger og servermigreringer.
Oppsummering
Cron sier ikke fra når en jobb feiler. Det gjør en heartbeat. Én curl-linje per jobb gjør stille feil om til varsler, og historikken viser nøyaktig når hver jobb sist kjørte.
Heartbeats er inkludert i alle Uptimecheck-planer, sammen med overvåking av oppetid, SSL, domener, DNS og servere. Prøv gratis i 14 dager, uten kredittkort.