Monitoring cron úloh

Získejte okamžitou informaci, kdy se zastaví vaše plánované úlohy. Zálohy, queue workeři, ETL úlohy, hodinové synchronizace – vše tiše sledováno.

Přidat monitor heartbeatu →

Uptime Monitoring - DiagnoSEO

Problém s naplánovanými úlohami

Krutou vlastností cronů je, že když selžou, nic ti o tom neřeknou. Webová aplikace stále obsluhuje požadavky, hlavní stránka vypadá v pořádku, monitoring svítí zeleně – ale někde na serveru se noční záloha nespustila už dva týdny. Queue worker spadl po nasazení a čekající joby se hromadí. Synchronizace každou hodinu tiše ztrácí řádky kvůli problémům s oprávněními. Dozvíš se to až tehdy, když něco downstream konečně spadne – většinou právě tehdy, když to nejvíc potřebuješ. Datový tým chce export, support frontu e-mailů, ops zálohu. V tu chvíli už je pozdě.

Standardní uptime monitoring to nezachytí, protože nemá co pingovat. Cron nevystavuje HTTP endpoint, neotevírá port, nespouští server. Spustí se, skončí, skončí. Pokud přestane fungovat – není žádný signál jeho nepřítomnosti, dokud nezačneš pátrat.

Obrácený vzorec: heartbeat monitoring

Heartbeat monitoring (nazývaný také „dead man's switch“ nebo „monitorování cronů“) obrací tok. Místo toho, abychom my kontrolovali vaši službu, vaše služba se hlásí u nás. Přidáš jeden řádek do crona – curl na unikátní URL, který vygenerujeme – a tento URL ukládá časovou značku při každém zásahu. My sledujeme absenci těchto pingů. Pokud URL není zasažen v očekávaném intervalu (plus tolerance), bereme to jako vynechaný běh a posíláme alert.

Model je jednoduchý, spolehlivý a nezávislý na jazyce. Cokoliv, co umí poslat HTTP request – lze integrovat. Bash přes curl, Python přes requests, Node přes fetch, PHP přes curl_init, Task Scheduler na Windows pomocí Invoke-WebRequest, GitHub Actions, Kubernetes CronJobs, naplánované události Lambda – cokoliv. Bez SDK, bez agenta, bez démona na instalaci.

Jak nastavit

V DiagnoSEO Uptime Monitoringu klikni na „Přidat monitor“, vyber typ „Heartbeat / cron“. Nástroj vygeneruje jedinečný URL s tokenem – něco jako https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9. Nastav očekávaný interval (jak často má job běžet, v minutách) a toleranci (o kolik zpoždění je ještě OK, než začneme panikařit). Ulož.

Nyní uprav svůj cron, aby pingoval URL po každém úspěšném běhu. Tři styly podle prostředí:

# Bash cron - ping pouze po úspěchu
0 3 * * * /usr/bin/backup.sh && curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null

# Nebo když je částečný úspěch OK
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 této chvíle každý úspěšný běh nám posílá ping a my ukládáme časovou značku. Pokud neuvidíme ping během interval + tolerance minut, otevře se incident a odejdou oznámení na všechny zapnuté kanály: Email, Telegram, Slack, Discord, SMS.

Výběr intervalu a tolerance

Interval by měl přesně odpovídat harmonogramu jobu. Noční záloha ve 3:00 – interval 1440 minut (24h). Synchronizace každou hodinu – 60. Worker, který polluje každých 5 min – 5.

Tolerance pohltí přirozený jitter. Crony se nespouštějí doslova na nanosekundu – jsou řazeny do fronty, čekají na dokončení předchozího běhu, backoffují při dočasných chybách. 24hodinový job s tolerancí 1 h dává pohodlný buffer bez zpoždění alertů. 5minutový worker s 2minutovou tolerancí zachytí skutečné pády rychle, bez false pozitivů z 30sekundového výpadku. Zhruba: nastav toleranci na 10–50 % intervalu v závislosti na tom, jak se job „toulá“.

Vzorce, které doporučujeme

  • Ping pouze po úspěchu. Používej && v bash – běh, který spadne, nepingá. My zjistíme chybějící ping a zalarmujeme.
  • Ping po každé iteraci cyklu. Pro dlouhoběžící workery pinguj uvnitř cyklu po každé úspěšně dokončené jednotce práce, ne až na konci. Díky tomu je zamrzlý worker detekován přímo během běhu.
  • Jeden heartbeat na logickou úlohu, ne na skript. Jestliže tři skripty tvoří jeden noční pipeline, pinguj jen na konci řetězce. To poskytuje jasný signál „funguje celý pipeline“.
  • Kombinuj s logy. Heartbeat říká, že job se spustil. Logy aplikace říkají, co udělal. Dohromady dávají úplný obrázek.

Co se stane, když heartbeat zmizí

Incident se otevře v okamžiku, kdy uplyne termín. Dashboard zobrazí monitor červeně s chybou „Heartbeat nepřišel přes X minut“. Upozornění dorazí na všechny kanály, které máš zapnuté. Když přijde nový heartbeat, monitor se automaticky přepne zpět do stavu up – je označen jako up, incident se uzavře a (pokud máš zapnuté notifikace o obnovení) přijde ti oznámení „zpět online“.

Všechno má stejné zacházení jako ostatní monitory – heatmapa, procento uptime, historie, tagy, vyhledávání, export. Z pohledu dashboardu je heartbeat monitor prostě další řádek, řaditelný a filtrovatelný vedle HTTP, ping, port a API.

Kontrolní seznam

Přidat monitor → typ Heartbeat → zkopíruj vygenerovaný URL → přidej do cronu / workeru / scheduleru → nastav interval a toleranci → ulož → hotovo. Teď se dozvíš během sekundy, kdy naplánovaná úloha přestane fungovat – což je z dlouhodobého hlediska jedno z nejdůležitějších rozhodnutí v monitoringu, které můžeš udělat.

Nejčastější dotazy

  • Obrácený monitoring – tvá naplánovaná úloha pinguje náš URL při úspěšném spuštění. Pokud od ní neuslyšíme v očekávaném okně, upozorníme. Řeší problém tichých selhání: rozbitý cron job nevyrábí chybu a nespustí tradiční uptime alert.

  • Přidej curl -fsS <heartbeat_url> na konec příkazu crona. Pokud příkaz předtím selže, curl se nespustí a heartbeat bude vynechán. Alternativně pinguj na začátku i na konci různými URL – získáš odděleně signály „started“ a „completed“.

  • Zhruba 2–3× typického času běhu úlohy. Pokud tvůj denní backup trvá 30 minut, nastav toleranci na 90 minut – pojme zpomalení bez falešných alertů. U úloh s proměnlivým časem nastav raději více a využij dashboard k identifikaci outlierů.

  • Ano – nastav interval dle potřeby (např. očekávej každých 60 minut s tolerancí 15 minut). Monitor očekává ping alespoň každých 75 minut. Pokud úloha běží častěji (každých 5 minut), heartbeat URL to také zvládá – jen tomu přizpůsob nastavení intervalu.

  • Ano. Přidej HTTP požadavek na heartbeat URL na konec funkce Lambda. Monitor to bere stejně jako cron heartbeat – stejné alertování, stejná tolerance. Užitečné pro naplánované Lambdy, kde CloudWatch nemusí zachytit tiché selhání běhu.

Přidat monitor heartbeatu →

Odemkněte vyšší pozice a kvalitní návštěvnost

Rozviňte svůj byznys s #1 AI poháněným softwarem pro SEO a obsahový marketing.

Povýšit na Advanced