Monitorovanie cron úloh
Zistite okamžite, keď sa vaše naplánované úlohy prestanú vykonávať. Zálohy, queue workeri, ETL úlohy, hodinové synchronizácie – všetko ticho sledované.
Problém s naplánovanými úlohami
Krutou vlastnosťou cronov je, že keď prestanú fungovať, nič ti to nepovie. Webová aplikácia stále obsluhuje požiadavky, hlavná stránka vyzerá v poriadku, monitoring svieti na zeleno – ale niekde na serveri nočný backup nebehol už dva týždne. Queue worker padol po deployi a nevybavené joby sa kopia. Synchronizácia každú hodinu potichu stráca riadky kvôli problému s oprávneniami. Dozvieš sa to až vtedy, keď niečo downstream konečne padne – zvyčajne práve vtedy, keď tú vec najviac potrebuješ. Data tím chce export, support čaká na emaily, ops zálohu. Vtedy je už neskoro.
Štandardný monitoring dostupnosti to nezachytí, pretože nie je čo pingovať. Cron nevystavuje HTTP endpoint, neotvára port, nespúšťa server. Spustí sa, dokončí, skončí. Ak prestane fungovať – nie je žiadny signál jeho neprítomnosti, pokiaľ nezačneš pátrať.
Opačný vzor: monitoring heartbeat
Monitoring heartbeat (nazývaný aj „dead man's switch“ alebo „monitoring cronov“) obracia smerovanie. Miesto toho, aby my kontrolovali tvoju službu, tvoja služba sa hlási u nás. Pridáš jeden riadok do cronu – curl na unikátnu URL, ktorú generujeme – a táto URL zaznamená časovú značku pri každom zaslaní. My sledujeme neprítomnosť týchto pingov. Ak URL nie je zasiahnutá v očakávanom intervale (plus tolerancia), považujeme to za zmeškaný beh a odošleme upozornenie.
Model je jednoduchý, spoľahlivý a nezávislý od jazyka. Všetko, čo zvládne HTTP požiadavku, sa integruje. Bash cez curl, Python cez requests, Node cez fetch, PHP cez curl_init, Task Scheduler vo Windows cez Invoke-WebRequest, GitHub Actions, Kubernetes CronJobs, Lambda scheduled events – čokoľvek. Bez SDK, bez agenta, bez démona na inštaláciu.
Ako nastaviť
V DiagnoSEO monitorovaní dostupnosti klikni na „Pridať monitor“, vyber typ „Heartbeat / cron“. Nástroj vygeneruje unikátnu URL s tokenom – niečo ako https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9. Nastav očakávaný interval (ako často má úloha behať, v minútach) a mieru tolerancie (o koľko môže byť oneskorené, kým spustíme paniku). Ulož.
Teraz uprav cron tak, aby pingoval URL po každom úspešnom behu. Tri štýly podľa prostredia:
# Bash cron – ping len po úspechu
0 3 * * * /usr/bin/backup.sh && curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null
# Alebo ak je OK aj čiastočný úspech
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
Od tohto momentu každý úspešný beh nás pingne a my zaznamenáme časovú značku. Ak neuvidíme ping počas interval + tolerancia minút, otvorí sa incident a pošleme upozornenia na všetky zapnuté kanály: Email, Telegram, Slack, Discord, SMS.
Výber intervalu a tolerancie
Interval by mal presne zodpovedať rozvrhu úlohy. Nočný backup o 3:00 – interval 1440 minút (24h). Synchronizácia každú hodinu – 60. Worker pollujúci každých 5 min – 5.
Tolerancia pohltí prirodzený jitter. Crony nebežia doslova na nanosekundu presne – sú zaradené do fronty, čakajú na ukončenie predchádzajúceho behu, robia back-off pri dočasných chybách. 24-hodinová úloha s toleranciou 1h dáva pohodlný buffer bez odkladu alertov. 5-minútový worker s 2-minútovou toleranciou zachytí skutočné „úmrtia“ rýchlo, bez falošných pozitív pri 30-sekundovom výkyve. Približne: nastav toleranciu na 10-50 % intervalu podľa toho, ako veľmi je úloha „divoká“.
Vzorové odporúčania
- Ping len po úspechu. Používaj
&&v bash – beh, ktorý padol, nepinguje. My zachytíme absenciu pingu a upozorníme. - Ping po každej iterácii cyklu. Pre dlhobežiacich workerov pinguj vo vnútri cyklu po každej úspešnej jednotke práce, nie na konci. Tak dokážeme odhaliť zamrznutého workera počas behu.
- Jeden heartbeat na logickú úlohu, nie na skript. Ak tri skripty tvoria jeden nočný pipeline, pinguj raz na konci reťazca. Tak máš čistý signál „či pipeline žije“.
- Kombinuj s logmi. Heartbeat znamená, že úloha sa spustila. Logy aplikácie ukazujú, čo spravila. Spolu dávajú kompletný obraz.
Čo sa stane, keď heartbeat zmizne
Incident sa otvorí v momente, keď uplynie deadline. Dashboard ukáže monitor na červeno s chybou „Chýba heartbeat už X minút“. Upozornenia sa pošlú na všetky aktívne kanály. Keď dorazí nový heartbeat, monitor sa automaticky vráti do stavu up – je označený ako dostupný, incident sa uzatvorí a (ak máš zapnuté recovery alerty) príde ti oznámenie „späť online“.
Všetko sa sleduje rovnako ako ďalšie monitory – heatmapa, percento uptime, história, tagy, vyhľadávanie, export. Z pohľadu dashboardu je monitor heartbeat len ďalším riadkom, ktorý sa dá triediť a filtrovať popri HTTP, ping, porte a API.
Kontrolný zoznam
Pridať monitor → typ Heartbeat → skopíruj vygenerovanú URL → pridaj do cron / worker / schedulera → nastav interval a toleranciu → ulož → hotovo. Teraz sa dozvieš v sekunde, keď naplánovaná úloha prestane fungovať – čo je z dlhodobého hľadiska jedno z najkľúčovejších rozhodnutí o monitoringu, aké môžeš urobiť.
Najčastejšie otázky
-
Opačný monitoring — tvoja naplánovaná úloha pingne našu URL pri úspešnom spustení. Ak od nej v očakávanom okne nepočujeme, upozorníme. Rieši problém tichých zlyhaní: pokazený cron-job nevygeneruje chybu a nevyvolá tradičný alert dostupnosti.
-
Pridaj
curl -fsS <heartbeat_url>na koniec cron príkazu. Ak príkaz predtým zlyhá, curl sa nespustí a heartbeat sa vynechá. Prípadne pinguj na začiatku aj na konci odlišnými cestami — zvlášť signály „začiatok“ a „dokončené“. -
Približne 2-3× typického času trvania úlohy. Ak tvoj denný backup trvá 30 minút, nastav grace na 90 minút — pokryje spomalenie bez falošných alertov. Pri úlohách s premenlivým časom trvania nastav väčšiu rezervu a použi dashboard na odhalenie výnimiek.
-
Áno — nastav interval podľa potreby (napr. 60 minút očakávaný s 15-minútovým grace). Monitor očakáva ping aspoň raz za 75 minút. Ak máš úlohu častejšie (každých 5 minút), heartbeat URL to zvládne — len prispôsob interval.
-
Áno. Pridaj odchádzajúcu HTTP požiadavku na heartbeat URL na konci funkcie Lambda. Monitor to vyhodnocuje rovnako ako cron heartbeat — rovnaké upozornenia, rovnaký grace period. Je to užitočné pre naplánované Lambdy, kde CloudWatch alarmy neodhalia tiché zlyhania behu.
UptimeRobot · Pingdom · BetterStack · Oh Dear · Site24x7 · StatusCake · Sentry · Uptrends · Cronitor · New Relic
Monitorovanie SSL · Expirácia domény · Monitorovanie DNS · Ping (ICMP) · Port (TCP) · Endpoint · Kľúčové slovo · API · Čas odozvy · Spätné odkazy · Lokalitne špecifické · Monitorovanie webstránok