Guides 6 min lukuaika

Cron-töiden valvonta heartbeat-pingeillä

Cron-työt epäonnistuvat hiljaa. Heartbeat-valvonta hälyttää, kun ajastettu työ ei ilmoittaudu ajallaan. Näin heartbeat toimii, näin lisäät sen crontabiin ja nämä asetukset kannattaa valita.

Cron-työtä valvotaan antamalla sille heartbeat: yksilöllinen URL-osoite, jota työ kutsuu aina valmistuttuaan. Valvontapalvelu odottaa tätä pyyntöä säännöllisin väliajoin. Jos se ei saavu ajoissa, koska työ ei käynnistynyt, kaatui tai jumiutui, saat hälytyksen. Siihen tarvitaan crontabiin yksi rivi lisää.

Tämä opas näyttää, miten heartbeat toimii, miten sellainen lisätään ja miten oikeat asetukset valitaan.

Miksi cron-työt tarvitsevat oman valvontansa

Cron käynnistää komennot luotettavasti mutta vaikenee siitä, mitä sen jälkeen tapahtuu. Jos varmuuskopioskripti epäonnistuu kello 02.00, mikään näkyvä ei hajoa. Sivusto pysyy pystyssä ja käytettävyystarkistukset vihreinä. Huomaat asian viikkoja myöhemmin, kun tarvitset varmuuskopiota eikä sitä ole.

Tyypillisiä hiljaisia virheitä:

Palvelin oli alhaalla tai käynnistymässä uudelleen ajastettuna aikana.

Crontab ylikirjoitettiin julkaisun tai palvelinsiirron yhteydessä.

Komento epäonnistuu cronissa, koska PATH tai muut ympäristömuuttujat poikkeavat komentotulkistasi.

Skripti käynnistyy mutta jumiutuu lukkoon, verkkokutsuun tai täyteen levyyn.

Tunnistetiedot vanhenivat, joten työ käynnistyy ja päättyy virheeseen, jota kukaan ei lue.

Käytettävyyden valvonta ei näe tästä mitään, koska mikään julkinen ei hajoa. Heartbeat toimii päinvastoin: sen sijaan, että valvonta tarkistaisi työsi, työsi ilmoittautuu valvonnalle.

Miten heartbeat toimii

Luot heartbeat-valvonnan ja saat yksilöllisen URL-osoitteen.

Määrität, milloin työn odotetaan ajautuvan, joko välinä, kuten 24 tunnin välein, tai työn omana crontab-ajastuksena, ja jätät hieman pelivaraa hitaille ajoille.

Työ kutsuu URL-osoitetta GET- tai POST-pyynnöllä valmistuttuaan.

Jos pyyntöä ei tule ajoissa, avautuu häiriö ja hälytykset lähtevät.

Kun seuraava ping saapuu, heartbeat palautuu ja saat ilmoituksen palautumisesta.

Uptimecheckin cron-valvonnat toimivat näin. Ne ottavat crontab-ajastuksen omalla aikavyöhykkeelläsi, hyväksyvät aloitus- ja lopetuspingit samaan valvontaan, hälyttävät, kun ajo ylittää enimmäiskestonsa, ja voivat tallentaa työn paluukoodin ja tulosteen. Hälytykset menevät sähköpostiin, Slackiin, Microsoft Teamsiin, Discordiin, Google Chatiin, Mattermostiin, Telegramiin, PagerDutyyn, ntfy:hin, Pushoveriin, webhookeihin ja push-ilmoituksina puhelimeen, jokaisessa paketissa.

Heartbeatin lisääminen crontabiin

Oletetaan, että varmuuskopio ajetaan joka yö kello 02.30:

30 2 * * * /usr/local/bin/backup.sh

Lisää ping työn perään ja ketjuta se &&-operaattorilla, jotta se ajetaan vain, kun varmuuskopiointi onnistuu:

30 2 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 –retry 3 https://heartbeat.example.com/your-unique-id > /dev/null

Mitä curlin valitsimet tekevät:

-f saa curlin epäonnistumaan HTTP-virheissä sen sijaan, että ne tulkittaisiin onnistumisiksi.

-s pitää sen hiljaisena, ja -S näyttää silti virheet, jos jokin menee pieleen.

-m 10 lopettaa odottamisen 10 sekunnin jälkeen, joten hidas verkko ei koskaan jumita työtä.

–retry 3 yrittää uudelleen lyhyiden verkko-ongelmien yli.

Korvaa paikkamerkki heartbeat-valvontasi tarkalla URL-osoitteella.

Ping skriptin sisältä

Pidemmissä skripteissä laita ping itse skriptin loppuun, tärkeiden vaiheiden jälkeen:

#!/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

Kun käytössä on set -e, skripti pysähtyy ensimmäiseen epäonnistuvaan komentoon, joten ping lähtee vain, kun kaikki sitä ennen onnistui.

Muut ajastimet

Heartbeat ei rajoitu croniin. Pingin voi lähettää mikä tahansa, joka pystyy tekemään HTTP-pyynnön: systemd-ajastimet, Windowsin Tehtävien ajoitus PowerShellin Invoke-WebRequest-komennolla, Kubernetesin CronJob, CI-putki tai sovelluksesi ajastettu funktio.

Välin valitseminen

Välin pitää vastata ajastusta: 24 tuntia öiselle työlle, 1 tunti tunnin välein ajettavalle työlle. Jätä pelivaraa tavalliselle vaihtelulle työn kestossa. Jos varmuuskopiointi kestää yleensä 20 minuuttia mutta joskus 50, tunnin lisävara estää väärät hälytykset piilottamatta todellista virhettä pitkään.

Aloita väljästi, katso viikon tai kahden ajan, kauanko ajot todella kestävät, ja tiukenna sitten. Jos valvontasi hyväksyy itse crontab-lausekkeen, kuten Uptimecheckin valvonta, liitä ajastus ja valitse palvelimen aikavyöhyke. Odotetut ajat seuraavat silloin ajastusta tarkasti, ja pelivarasta tulee armonaika.

Heartbeat verrattuna muihin tapoihin

Ajastettuja töitä voi seurata muillakin tavoilla, mutta jokaisessa on aukkonsa:

Sähköposti cronilta. Cron voi lähettää komennon tulosteen sähköpostilla, mutta vain kun työ ajetaan ja tuottaa tulostetta. Jos työ ei koskaan käynnisty, sähköpostia ei tule. Useimmat näistä viesteistä jäävät muutenkin lukematta.

Lokien valvonta. Hyödyllistä virheiden etsimiseen, mutta työ, jota ei koskaan ajettu, ei kirjoita lokiin riviä, jota etsiä.

Tulosten tarkistaminen. Osa tiimeistä tarkistaa, onko varmuuskopiotiedosto olemassa tai onko taulu päivittynyt. Se toimii, mutta vaatii omat tarkistukset jokaiselle työlle.

Heartbeat toimii samalla tavalla jokaiselle työlle ja huomaa tapauksen, jonka muut ohittavat: työn, jota ei ajettu lainkaan.

Pitkäkestoiset työt

Kauan kestävissä töissä, kuten suurissa varmuuskopioissa tai datasiirroissa, lähetä ping sekä alussa että lopussa. Jos aloitusping saapuu mutta lopetusping ei, työ jumiutui tai kaatui kesken. Silloin tiedät, mistä etsiä, ennen kuin avaat yhtään lokitiedostoa.

Uptimecheckissä molemmat pingit menevät samaan valvontaan: kutsu URL-osoitetta, jonka perään on lisätty /start, kun työ alkaa, ja pelkkää URL-osoitetta, kun se päättyy. Väliin jäävä aika tallennetaan ajon kestoksi, ja jos asetat enimmäiskeston, saat hälytyksen, kun ajo kestää pidempään.

Mille töille heartbeat kannattaa antaa

Kaikki työt eivät sellaista tarvitse. Priorisoi työt, joiden epäonnistumisen huomaisit vasta myöhemmin:

Tietokantojen ja tiedostojen varmuuskopiot.

Datan tuonnit ja viennit, kuten tuotesyötteet tai kirjanpidon synkronoinnit.

Laskutusajot, uusinnat ja maksutyöt.

Varmenteiden uusimistyöt.

Siivoustyöt, jotka estävät levyä täyttymästä.

Raporttien luonti, josta muut ovat riippuvaisia.

Anna jokaiselle työlle oma heartbeat. Yhteinen kertoo, että jokin jäi ajamatta, mutta ei sitä, mikä.

Puuttuvan heartbeatin selvittäminen

Kun heartbeat-hälytys saapuu:

Tarkista, käynnistikö cron työn. Katso cronin tai järjestelmän lokia.

Aja komento käsin samana käyttäjänä, jota cron käyttää, ja lue tuloste.

Tarkista ympäristö. Käytä absoluuttisia polkuja tai aseta PATH crontabin alkuun.

Tarkista resurssit. Täysi levy tai loppunut muisti pysäyttää monet työt. Palvelinvalvonta näyttää levyn, muistin ja kuorman virheen hetkellä.

Tarkista lähtevä verkkoliikenne. Palomuurimuutos voi estää pingin, vaikka työ toimisi. Jos työ ajettiin mutta ping epäonnistui, curlin virhe näkyy työn tulosteessa.

Ohjaa työn tuloste lokitiedostoon, jotta luettavaa on aina:

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

Voit myös lähettää tuloksen pingin mukana. Uptimecheckissä URL-osoitteen päättäminen paluukoodiin (/0 tarkoittaa onnistumista, mikä tahansa muu epäonnistumista) kertoo, miten työ päättyi, ja POST-pyynnön runko tallennetaan työn tulosteeksi ja näytetään hälytyksen yhteydessä. Tämä rivi lähettää pingin alussa, ajaa työn ja raportoi sen paluukoodin ja tulosteen:

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/$?

Cron-töiden valvonnan tarkistuslista

Listaa tärkeät ajastetut työt jokaiselta palvelimelta.

Luo jokaiselle työlle oma heartbeat.

Lähetä ping vasta, kun työ on onnistunut: ketjuta se &&-operaattorilla tai laita se set -e -skriptin loppuun.

Aseta väli ajastuksen mukaan ja jätä pelivaraa hitaille ajoille.

Kirjaa työn tuloste tiedostoon.

Ohjaa hälytykset kanavaan, jota joku lukee, kriittisissä töissä myös öisin.

Käy heartbeat-historia läpi julkaisujen ja palvelinsiirtojen jälkeen.

Yhteenveto

Cron ei kerro, kun työ epäonnistuu. Heartbeat kertoo. Yksi curl-rivi työtä kohden muuttaa hiljaiset virheet hälytyksiksi, ja historiasta näet tarkalleen, milloin kukin työ viimeksi ajettiin.

Heartbeat-valvonta sisältyy jokaiseen Uptimecheckin pakettiin yhdessä käytettävyyden, SSL-varmenteiden, verkkotunnusten, DNS:n ja palvelinten valvonnan kanssa. Kokeile ilmaiseksi 14 päivää, luottokorttia ei tarvita.

Kysymykset

Mikä on cron-työn heartbeat?

Heartbeat on yksilöllinen URL-osoite, jota ajastettu työ kutsuu aina ajon yhteydessä. Valvontapalvelu odottaa pyyntöä määritetyn välin sisällä ja hälyttää, jos sitä ei tule.

Pitäisikö ping lähettää ennen työtä vai sen jälkeen?

Vasta kun työ on päättynyt onnistuneesti. Kun ping ketjutetaan &&-operaattorilla, epäonnistunut työ ei lähetä pingiä, joten saat hälytyksen sekä silloin, kun työ ei käynnisty, että silloin, kun se käynnistyy mutta epäonnistuu.

Toimiiko heartbeat systemd-ajastimien, Windowsin Tehtävien ajoituksen tai Kubernetesin CronJobien kanssa?

Kyllä. Mikä tahansa, joka voi lähettää HTTP-pyynnön valmistuttuaan, voi pingata heartbeatia, ajastipa sen mikä tahansa.

Mitä tapahtuu, jos palvelimeni on alhaalla, kun työn pitäisi käynnistyä?

Työ ei käynnisty, ping ei saavu ja saat hälytyksen. Juuri tällaisia tilanteita varten heartbeat on suunniteltu.

Jatka lukemista

Katkot ovat menneisyyttä.

Luo ensimmäinen valvontasi alle minuutissa – tai tutustu ensin live-demoon.

14 päivän ilmainen kokeilu · Sen jälkeen ilmainen 5 valvonnalle · Ei luottokorttia