För att övervaka ett cron-jobb ger du det en heartbeat: en unik webbadress som jobbet anropar varje gång det blir klart. En övervakningstjänst väntar på det anropet med jämna mellanrum. Kommer det inte i tid, för att jobbet inte kördes, kraschade eller hängde sig, får du ett larm. Det kräver en extra rad i din crontab.
Den här guiden visar hur heartbeats fungerar, hur du lägger till en och hur du väljer rätt inställningar.
Varför cron-jobb behöver egen övervakning
Cron är pålitligt på att starta kommandon och tyst om vad som händer sedan. Om ett backupskript misslyckas klockan 02:00 går inget synligt sönder. Webbplatsen är uppe och upptidskontrollerna lyser gröna. Du upptäcker det veckor senare, när du behöver säkerhetskopian och den inte finns.
Typiska tysta fel:
Servern var nere eller startade om vid den schemalagda tiden.
Crontab skrevs över vid en driftsättning eller servermigrering.
Kommandot misslyckas under cron eftersom PATH eller andra miljövariabler skiljer sig från ditt skal.
Skriptet körs men hänger sig på ett lås, ett nätverksanrop eller en full disk.
Inloggningsuppgifter har gått ut, så jobbet startar och avslutas med ett fel som ingen läser.
Upptidsövervakning ser inget av detta, eftersom inget publikt går sönder. En heartbeat fungerar åt andra hållet: i stället för att monitorn kontrollerar ditt jobb är det jobbet som hör av sig till monitorn.
Så fungerar en heartbeat
Du skapar en heartbeat-monitor och får en unik webbadress.
Du anger när jobbet förväntas köras, som ett intervall, till exempel var 24:e timme, eller som jobbets eget crontab-schema, med lite marginal för långsamma körningar.
Jobbet anropar webbadressen med GET eller POST när det är klart.
Kommer inget anrop i tid öppnas en incident och larmen går ut.
När nästa ping kommer återställs heartbeaten och du får ett meddelande om det.
Uptimechecks cron-monitorer fungerar så här. De tar crontab-schemat i din tidszon, tar emot start- och slutpingar på samma monitor, larmar när en körning överskrider sin maximala körtid och kan spara exit code och jobbets utdata. Larmen går till e-post, Slack, Microsoft Teams, Discord, Google Chat, Mattermost, Telegram, PagerDuty, ntfy, Pushover, webhooks och pushnotiser i mobilen, på alla planer.
Lägg till en heartbeat i crontab
Anta att en säkerhetskopiering körs varje natt klockan 02:30:
30 2 * * * /usr/local/bin/backup.sh
Lägg till pingen efter jobbet, kopplad med && så att den bara körs när säkerhetskopieringen lyckas:
30 2 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 –retry 3 https://heartbeat.example.com/your-unique-id > /dev/null
Det här gör curl-flaggorna:
-f får curl att misslyckas vid HTTP-fel i stället för att behandla dem som lyckade.
-s håller den tyst, och -S visar ändå fel om något går snett.
-m 10 slutar vänta efter 10 sekunder, så att ett långsamt nätverk aldrig blockerar jobbet.
–retry 3 försöker igen vid kortvariga nätverksproblem.
Ersätt platshållaren med den exakta webbadressen från din heartbeat-monitor.
Pinga inifrån ett skript
I längre skript lägger du pingen sist i själva skriptet, efter de steg som spelar roll:
#!/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 stannar skriptet vid första kommando som misslyckas, så pingen skickas bara när allt före den har fungerat.
Andra schemaläggare
Heartbeats är inte begränsade till cron. Allt som kan göra en HTTP-förfrågan kan pinga: systemd-timers, Schemaläggaren i Windows med PowerShells Invoke-WebRequest, ett Kubernetes CronJob, en CI-pipeline eller en schemalagd funktion i din applikation.
Välj intervall
Intervallet ska matcha schemat: 24 timmar för ett nattligt jobb, 1 timme för ett jobb som körs varje timme. Lämna marginal för normal variation i hur lång tid jobbet tar. Om en säkerhetskopiering brukar ta 20 minuter men ibland 50 undviker en extra timmes marginal falsklarm utan att dölja ett verkligt fel särskilt länge.
Börja generöst, titta på hur lång tid körningarna faktiskt tar under en vecka eller två och dra sedan åt. Om din monitor tar emot själva crontab-uttrycket, som Uptimechecks gör, klistrar du in schemat och väljer serverns tidszon. Då följer de förväntade tiderna schemat exakt, och marginalen blir en respitperiod.
Heartbeats jämfört med andra metoder
Det finns andra sätt att bevaka schemalagda jobb, alla med luckor:
E-post från cron. Cron kan mejla kommandots utdata, men bara när jobbet körs och skriver ut något. Startar jobbet aldrig kommer inget mejl. De flesta sådana mejl blir dessutom olästa.
Loggövervakning. Användbart för att hitta fel, men ett jobb som aldrig kördes skriver ingen loggrad att söka efter.
Kontrollera resultaten. Vissa team kontrollerar att en backupfil finns eller att en tabell har uppdaterats. Det fungerar, men kräver egna kontroller för varje jobb.
En heartbeat fungerar likadant för alla jobb och fångar det fall som de andra missar: jobbet som inte kördes alls.
Långvariga jobb
För jobb som tar lång tid, som stora säkerhetskopieringar eller datamigreringar, pingar du både vid start och vid slut. Kommer startpingen men inte slutpingen har jobbet hängt sig eller kraschat halvvägs. Då vet du var du ska leta innan du har öppnat en enda loggfil.
I Uptimecheck går båda pingarna till samma monitor: anropa webbadressen med /start tillagt när jobbet börjar, och den vanliga webbadressen när det är klart. Tiden däremellan sparas som körtiden, och om du anger en maximal körtid får du ett larm när en körning tar längre tid.
Vilka jobb som ska ha en heartbeat
Alla jobb behöver inte en. Prioritera jobb vars fel du bara skulle märka i efterhand:
Säkerhetskopior av databaser och filer.
Import och export av data, som produktflöden eller synkning med bokföringen.
Fakturakörningar, förnyelser och debiteringsjobb.
Jobb som förnyar certifikat.
Rensningar som hindrar en disk från att bli full.
Rapporter som andra är beroende av.
Ge varje jobb en egen heartbeat. En gemensam säger att något inte kördes, men inte vad.
Felsök en missad heartbeat
När ett heartbeat-larm kommer:
Kontrollera om cron startade jobbet. Titta i cron- eller systemloggen.
Kör kommandot för hand som samma användare som cron använder, och läs utdatan.
Kontrollera miljön. Använd absoluta sökvägar, eller sätt PATH överst i crontab.
Kontrollera resurserna. En full disk eller slut på minne stoppar många jobb. Serverövervakning visar disk, RAM och belastning vid tidpunkten för felet.
Kontrollera utgående nätverk. En ändring i brandväggen kan blockera pingen även när jobbet fungerar. Om jobbet kördes men pingen misslyckades syns curls felmeddelande i jobbets utdata.
Skicka jobbets utdata till en loggfil, så att det alltid finns något att läsa:
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 också skicka med resultatet i pingen. I Uptimecheck rapporterar du hur jobbet slutade genom att avsluta webbadressen med exit code (/0 betyder lyckat, allt annat ett fel), och en POST-body sparas som jobbets utdata och visas i larmet. Den här raden pingar vid start, kör jobbet och rapporterar dess exit code och utdata:
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/$?
Checklista för övervakning av cron-jobb
Lista de schemalagda jobb som spelar roll, på varje server.
Skapa en heartbeat per jobb.
Pinga när arbetet har lyckats, kopplat med && eller sist i ett set -e-skript.
Sätt intervallet efter schemat, med marginal för långsamma körningar.
Logga jobbets utdata till en fil.
Skicka larmen till en kanal som någon läser, även nattetid för kritiska jobb.
Gå igenom heartbeat-historiken efter driftsättningar och servermigreringar.
Sammanfattning
Cron säger inte till när ett jobb misslyckas. Det gör en heartbeat. En curl-rad per jobb gör tysta fel till larm, och historiken visar exakt när varje jobb senast kördes.
Heartbeats ingår i alla Uptimechecks planer, tillsammans med övervakning av upptid, SSL, domäner, DNS och servrar. Prova gratis i 14 dagar, inget kreditkort krävs.