Cron darba uzraudzība
Uzziniet uzreiz, kad jūsu ieplānotie uzdevumi pārstāj darboties. Dublējumi, rindas darbinieki, ETL uzdevumi, ikstundas sinhronizācijas — viss tiek klusi uzraudzīts.
Pievienot sirdspukstu uzraudzību →
Problēma ar ieplānotajiem uzdevumiem
Briesmīgā cron uzdevumu iezīme ir tāda, ka, ja tie apstājas, neviens Tev par to nepaziņos. Tava tīmekļa lietotne joprojām apkalpo pieprasījumus, galvenā lapa izskatās labi, monitorings rāda zaļu gaismu – taču kaut kur serverī nakts rezerves kopēšana nav palaista jau divas nedēļas. Queue worker apstājās pēc deploy, un atliekto darbu rinda aug. Sinhronizācija reizi stundā klusi zaudē ierakstus atļauju problēmu dēļ. Tu uzzini par to tikai tad, kad kaut kas „lejupceļā” beidzot apstājas – parasti tad, kad tas visvairāk nepieciešams. Datu komandai vajag eksportu, atbalstam – e-pastu rindu, ops – dublējumu. Tad jau par vēlu.
Standarta uptime monitorings to nepamanīs, jo nav ko pingot. Cron neizveido HTTP endpointu, neatver portu, nepalaiž serveri. Tas palaižas, beidzas, atkal beidzas. Ja pārstāj darboties – nav nekādu signālu par tā neesamību, līdz Tu pats nesāc meklēt.
Otrādi: heartbeat monitorings
Heartbeat monitorings (dēvēts arī par „dead man's switch” vai „cron monitoringu”) apgriež virzienu. Tā vietā, lai mēs pārbaudītu tavu pakalpojumu, tavs pakalpojums paziņo mums. Pievieno vienu rindu cron uzdevumam – curl uz unikālu URL, ko mēs ģenerējam – un šis URL reģistrē laika zīmogu katru reizi, kad tas saņem „ping”. Mēs uzraugām, vai šie pingi nepazūd. Ja URL netiek sasniegts gaidītajā intervālā (plus rezervēts laiks), to uzskatām par izlaistu palaidi un sūtām brīdinājumu.
Modelis ir vienkāršs, drošs un neatkarīgs no valodas. Viss, kas spēj veikt HTTP pieprasījumu – integrējas. Bash ar curl, Python ar requests, Node ar fetch, PHP ar curl_init, Task Scheduler uz Windows ar Invoke-WebRequest, GitHub Actions, Kubernetes CronJobs, Lambda plānotie notikumi – jebkas. Bez SDK, bez aģenta, bez dēmona instalēšanas.
Kā to konfigurēt
DiagnoSEO Uptime Monitoring sadaļā noklikšķini „Pievienot monitoru”, izvēlies tipu „Heartbeat / cron”. Rīks ģenerēs unikālu URL ar tokenu – kaut ko līdzīgu https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9. Iestati gaidīto intervālu (cik bieži uzdevumam jādarbojas, minūtēs) un rezervi (cik daudz aizkavēšanās ir OK, pirms mēs sākam uztraukties). Saglabā.
Tagad izmaini cron uzdevumu, lai pēc katras veiksmīgas palaides tas pingotu URL. Trīs veidi atkarībā no vides:
# Bash cron - ping tikai pēc veiksmes
0 3 * * * /usr/bin/backup.sh && curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null
# Vai, ja daļēja veiksme ir 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
No šī brīža katrs veiksmīgs palaidi mūs pingo, un mēs reģistrējam laika zīmi. Ja intervāls + rezerve minūšu laikā ping netiek saņemts, tiek atvērts incidents un ziņojumi iet pa visiem ieslēgtajiem kanāliem: E-pasts, Telegram, Slack, Discord, SMS.
Intervāla un rezerves izvēle
Intervālam jāatbilst uzdevuma grafikam. Nakts rezerves kopēšana 3:00 – intervāls 1440 minūtes (24h). Sinhronizācija reizi stundā – 60. Worker, kas pārbauda ik pēc 5 minūtēm – 5.
Rezerve kompensē dabisko svārstību. Cron uzdevumi nedarbojas precīzi nanosekundēs – tie tiek kārtoti, gaida iepriekšējā palaides noslēgšanos, aizkavējas īslaicīgu kļūdu dēļ. 24h uzdevums ar 1h rezervi dod ērtu buferi bez liekas aizkavēšanās brīdinājumā. 5 minūšu worker ar 2 minūšu rezervi ātri noķer īstas „nāves”, bez viltus trauksmēm no 30 sekunžu aizturēm. Aptuveni: noformē rezervi 10–50% apmērā no intervāla atkarībā no tā, cik haotisks ir uzdevums.
Ieteicamie risinājumi
- Ping tikai pēc veiksmes. Lieto
&&bash vidē – palaide, kas neizdodas, netiek pingota. Mēs atklāsim ping trūkumu un brīdināsim. - Ping pēc katras cikla iterācijas. Ilgi darbojošiem_workeriem pingo iekš cikla pēc katras veiksmīgas darba vienības, nevis tikai beigās. Tas ļauj identificēt „iestrēgušo” worker jau palaides laikā.
- Viena heartbeat vienam loģiskam uzdevumam, nevis skriptam. Ja trīs skripti veido vienu nakts pipeline, ping tikai ķēdes beigās. Tā iegūsi skaidru signālu – vai pipeline darbojas.
- Kombinējiet ar žurnāliem. Heartbeat rāda, ka uzdevums ir palaists. Lietotnes žurnāli rāda, ko tas īsti izdarīja. Kopā sniedz pilnu ainu.
Kas notiek, kad pazūd heartbeat
Incidentu atver brīdī, kad beidzas termiņš. Panelī monitors parādās sarkans ar kļūdu „Nav heartbeat jau X minūtes”. Ziņojumi tiek sūtīti pa visiem kanāliem, kas ir aktivizēti. Kad ienāk jauns heartbeat, monitors automātiski pārslēdzas uz „up” – tiek atzīmēts kā up, incidents tiek aizvērts, un (ja „recovery” brīdinājumi ir aktivizēti) saņemsi paziņojumu „back online”.
Tam visam ir tāds pats režīms kā citiem monitoriem – siltuma karte, uptime procents, vēsture, tagi, meklēšana, eksports. No paneļa viedokļa heartbeat moniors ir vienkārši kārtējā rinda blakus HTTP, ping, porta un API monitoriem, kuru var kārtot un filtrēt.
Kontrolsaraksts
Pievieno monitoru → tips Heartbeat → kopē ģenerēto URL → pievieno cron / worker / scheduler → iestati intervālu un rezervi → saglabā → gatavs. Tagad Tu uzzināsi acumirklī, ja ieplānotais uzdevums pārstās strādāt – kas ilgtermiņā ir viena no svarīgākajām monitoringa izvēlēm, ko vari izdarīt.
Biežāk uzdotie jautājumi
-
Apgrieztais monitorings – Tavs ieplānotais uzdevums pingo mūsu URL, kad veiksmīgi tiek palaists. Ja noteiktajā laikā nesaņemam pingu, nosūtām brīdinājumu. Tas atrisina kluso kļūmju problēmu: bojāts cron uzdevums nerada kļūdu un neaktivizē standarta uptime trauksmi.
-
Pievieno
curl -fsS <heartbeat_url>cron komandas beigās. Ja iepriekšējā komanda izgāžas, curl neizpildās un heartbeat tiek izlaists. Alternatīvi, pingot gan sākumā, gan beigās ar dažādiem ceļiem – tas sniedz „started” un „completed” signālus atsevišķi. -
Aptuveni 2–3 reizes ilgāku nekā parasti nepieciešams, lai uzdevums izpildītos. Ja Tavs ikdienas backups aizņem 30 minūtes, iestati grace uz 90 minūtēm – tas ņem vērā aiztures bez viltus trauksmēm. Uzdevumiem ar svārstīgu izpildes laiku iestati lielāku rezervi un izmanto paneli, lai atrastu izņēmumus.
-
Jā – iestati atbilstošu intervālu (piemēram, 60 minūtes, grace – 15 minūtes). Monitors gaidīs vismaz vienu pingu ik pēc 75 minūtēm. Ja Tavs uzdevums darbojas biežāk (ik pēc 5 minūtēm), heartbeat URL to apstrādā – vienkārši pielāgo intervāla iestatījumu.
-
Jā. Pievieno izejošo HTTP pieprasījumu uz heartbeat URL Lambda funkcijas beigās. Monitors to traktēs tieši tāpat kā cron heartbeat – tādi paši brīdinājumi, tas pats grace periods. Noder ieplānotām Lambd funkcijām, kad CloudWatch alarmi nepamana klusas izpildes kļūmes.
UptimeRobot · Pingdom · BetterStack · Oh Dear · Site24x7 · StatusCake · Sentry · Uptrends · Cronitor · New Relic
SSL uzraudzība · Domēna termiņa beigas · DNS uzraudzība · Ping (ICMP) · Ports (TCP) · Galapunkts · Atslēgvārds · API · Atbildes laiks · Atsaistes · Specifisks reģions · Vietnes uzraudzība