Guides 6 min lesing

Slik overvåker du cron-jobber med heartbeats

Cron-jobber feiler i stillhet. En heartbeat-monitor varsler deg når en planlagt jobb ikke melder seg i tide. Slik fungerer heartbeats, slik legger du en til i crontab, og disse innstillingene bør du velge.

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.

Spørsmål

Hva er en heartbeat for cron-jobber?

En heartbeat er en unik URL som en planlagt jobb kaller hver gang den kjører. Overvåkingstjenesten venter på forespørselen innen et fast intervall og varsler deg hvis den ikke kommer.

Skal pingen komme før eller etter jobben?

Etter at arbeidet er fullført uten feil. Kobler du pingen med &&, pinger ikke en jobb som feiler, så du får et varsel både når jobben ikke kjører og når den kjører, men feiler.

Fungerer en heartbeat med systemd-timere, Windows Oppgaveplanlegging eller Kubernetes CronJobs?

Ja. Alt som kan sende en HTTP-forespørsel når det er ferdig, kan pinge en heartbeat, uansett hva som planlegger det.

Hva skjer hvis serveren min er nede når jobben skal kjøre?

Jobben kjører ikke, pingen kommer ikke, og du får et varsel. Det er nettopp et av tilfellene heartbeats er laget for å fange opp.

Les videre

Guides 8 min lesing

Cron-uttrykk forklart: syntaks, eksempler og vanlige feil

Et cron-uttrykk er fem felt som sier når en jobb skal kjøres. Her er syntaksen, spesialtegnene og snarveier som @daily, ferdige eksempler og feilene med tidssone og PATH som får jobber til å stoppe.

Les

Nedetid er fortid.

Sett opp din første monitor på under ett minutt, eller se deg rundt i livedemoen først.

14 dagers gratis prøveperiode · Deretter gratis for 5 monitorer · Uten kredittkort