Overvåking av cron-jobb

Finn ut med én gang dine planlagte oppgaver slutter å kjøre. Sikkerhetskopier, køarbeidere, ETL-jobber, timesynkroniseringer – alt overvåkes stillegående.

Legg til pulssignal-overvåking →

Uptime Monitoring – DiagnoSEO

Problem med planlagte oppgaver

En grusom egenskap med croner er at når de svikter, får du ingen beskjed om det. Nettsiden leverer fortsatt forespørsler, forsiden ser grei ut, overvåkingen er grønn – men et eller annet sted på serveren har nattlig backup ikke kjørt på to uker. Queue workeren krasjet etter deploy, og gamle jobber hoper seg opp. Timesynkronisering mister stilletiende rader på grunn av rettighetsproblemer. Du oppdager det først når noe lengre ned i kjeden endelig svikter – som regel akkurat når du virkelig trenger det. Datateamet vil ha eksport, support en e-postkø, ops vil ha backup. Da er det allerede for sent.

Vanlig oppetidsovervåking fanger ikke dette, for det er ingenting å pinge. Cron tilbyr ikke en HTTP-endepunkt, åpner ingen port, og starter ingen server. Den starter, kjører ferdig, og er ferdig. Hvis den slutter å kjøre – kommer det ingen signal om fraværet før du selv begynner å lete.

Omvendt mønster: heartbeat-overvåking

Heartbeat-overvåking (også kalt "dead man's switch" eller "cron-overvåking") snur logikken. I stedet for at vi sjekker din tjeneste, rapporterer din tjeneste inn til oss. Du legger til én linje i cron – en curl til en unik URL vi genererer – og denne URL-en lagrer et tidsstempel for hvert treff. Vi følger med på om pingene uteblir. Hvis URL-en ikke treffes innen forventet intervall (pluss margin), regnes det som et tapt kjør og vi sender varsel.

Modellen er enkel, pålitelig og språkuavhengig. Alt som kan gjøre en HTTP-forespørsel kan kobles sammen. Bash med curl, Python med requests, Node med fetch, PHP med curl_init, Task Scheduler på Windows med Invoke-WebRequest, GitHub Actions, Kubernetes CronJobs, Lambda scheduled events – alt fungerer. Uten SDK, uten agent, uten å installere noen demon.

Slik konfigurerer du

I DiagnoSEO Uptime Monitoring, klikk "Legg til monitor", velg type "Heartbeat / cron". Verktøyet genererer en unik URL med token – noe som https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9. Sett ønsket intervall (hvor ofte jobben skal kjøres, i minutter) og margin (hvor sent det kan være før vi får panikk). Lagre.

Endre deretter cron til å pinge URL-en etter hvert vellykket kjør. Tre varianter avhengig av miljø:

# Bash cron – ping bare ved suksess
0 3 * * * /usr/bin/backup.sh && curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null

# Eller hvis delvis suksess er greit
0 3 * * * /usr/bin/backup.sh; curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null

# Python
import requests
def main():
    do_the_work()
    requests.get('https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9', timeout=5)

# GitHub Actions
- name: Notify heartbeat
  if: success()
  run: curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9

Fra dette tidspunktet vil hvert vellykket kjør pinge oss, og vi lagrer timestampen. Hvis vi ikke ser en ping i løpet av intervall + margin minutter, åpnes en hendelse og varsel sendes til alle aktiverte kanaler: E-post, Telegram, Slack, Discord, SMS.

Valg av intervall og margin

Intervall må matche oppgaveplanen. Nattlig backup kl 03:00 – intervall 1440 minutter (24t). Timesynkronisering – 60. Worker som kjører hvert 5. minutt – 5.

Margin tar høyde for naturlig jitter. Croner starter ikke bokstavelig på nanosekundet – de kan havne i kø, vente på at forrige kjør avsluttes, gjøre backoff ved små feil. En 24-timersjobb med 1t margin gir en komfortabel buffer uten å forsinke varsler. En 5-minutters pollende worker med 2 minutters margin fanger reelle krasjer raskt, uten falske positiver fra et 30 sekunders glipp. Tommelfingerregel: sett margin til 10–50 % av intervallet, avhengig av hvor "ustø" jobben din er.

Anbefalte mønstre

  • Ping kun ved suksess. Bruk && i bash – kjøringer som feiler vil ikke pinge. Vi oppdager fravær av ping og varsler deg.
  • Ping for hver løkkeiterasjon. For langtlevende workere: ping inni løkken for hver vellykket enhet – ikke bare på slutten. Da oppdages hengende workere allerede underveis.
  • Én heartbeat per logisk jobb, ikke per skript. Har du tre skript i én nattlig pipeline, ping én gang på slutten av kjeden. Gir et klart signal om "pipeline lever".
  • Koble med logger. Heartbeat sier at jobben har startet. Applikasjonslogger forteller hva som faktisk ble gjort. Sammen gir de fullt bilde.

Hva skjer hvis heartbeat uteblir?

En hendelse opprettes straks fristen er utløpt. Dashbordet viser monitoren i rødt med feilen "Ingen heartbeat siste X minutter". Varsling sendes ut til alle kanaler du har aktivert. Når ny heartbeat kommer inn, settes monitoren automatisk til up – markeres som up, hendelsen lukkes, og (hvis du har gjenopprettingsvarsler på) får du beskjed om at det er "tilbake online".

Alt håndteres på samme måte som andre monitorer – heatmap, oppetidsprosent, historikk, tags, søk, eksport. For dashboardet er en heartbeat-monitor bare en ny rad, sorterbar og filtrerbar sammen med HTTP, ping, port og API.

Sjekkliste

Legg til monitor → velg Heartbeat-type → kopier generert URL → legg inn i cron / worker / scheduler → sett intervall og margin → lagre → ferdig. Nå får du beskjed i løpet av et sekund om planlagt oppgave slutter å kjøre – dette er på lang sikt en av de viktigste overvåkingsbeslutningene du kan ta.

Ofte stilte spørsmål

  • Omvendt overvåking – din planlagte oppgave pinger vår URL når den starter vellykket. Hvis vi ikke hører fra den innenfor tidsvinduet, varsler vi. Løser problemet med stille feil: en ødelagt cron-job genererer ingen feil og utløser ikke vanlige oppetidsvarsler.

  • Legg til curl -fsS <heartbeat_url> på slutten av cron-kommandoen. Hvis kommandoen foran feiler, vil ikke curl kjøre og heartbeat blir utelatt. Alternativt kan du pinge både ved start og slutt på forskjellige endepunkter – dette gir separate signaler for "startet" og "ferdig".

  • Cirka 2–3x vanlig kjøretid for oppgaven. Hvis din daglige backup tar 30 minutter, sett grace til 90 minutter – det gir rom for forsinkelser uten falske alarmer. For oppgaver med variabel kjøretid, sett generøst og bruk dashbordet for å identifisere outliers.

  • Ja – sett intervall til det som passer (for eksempel 60 minutters forventning med 15 minutters grace). Monitoren forventer ping minst hver 75. minutt. Om jobben din kjører oftere (hver 5. minutt), støtter heartbeat-URL også dette – bare tilpass intervallinnstillingen.

  • Ja. Legg til utgående HTTP-kall til heartbeat-URL på slutten av Lambda-funksjonen. Monitoren håndterer dette likt som en cron heartbeat – samme varsling, samme grace period. Nyttig for planlagte Lambdaer der CloudWatch-varsler ikke fanger stille feil i kjøring.

Legg til pulssignal-overvåking →

Lås opp høyere rangeringer og kvalitetstrafikk

Voks din virksomhet med den beste AI-drevne komplette løsningen for SEO og innholdsmarkedsføring.

Oppgrader til Advanced