InfraNestInfraNest
Monitors & checks

Een cron-taak of script monitoren

De meeste controles benaderen iets van jou. Een heartbeat-monitor werkt andersom: je back-upscript, cron-taak of geplande taak meldt zich bij…

Bijgewerkt 2 november 20266 min lezen

Houd back-upscripts, cron-taken en geplande taken in de gaten die volgens een schema moeten draaien — en krijg direct een melding zodra er een stilletjes mee stopt. Dit artikel is voor iedereen die vertrouwt op een taak die regelmatig draait en wil weten of dat een keer niet gebeurt.

#Overzicht

  • De meeste monitors benaderen actief iets van jou. Een heartbeat-monitor werkt andersom: je taak meldt zich bij InfraNest telkens wanneer hij klaar is.
  • Als die melding niet op tijd binnenkomt, waarschuwt InfraNest je — dit is de manier om een taak te ontdekken die stilletjes gestopt is met draaien.
  • Je kunt dit automatisch instellen als de InfraNest-agent op de server draait, of handmatig voor al het andere, inclusief GitHub Actions-workflows.

#Een cron-taak bewaken op een server met de agent

Als de InfraNest-agent op de server draait, hoef je niets handmatig in te stellen:

  1. Open de server en ga naar Workloads. Onder Geplande taken zie je elke cron-taak en systemd-timer erop — wanneer elk draait, als welke gebruiker, en wanneer de volgende run is.
  2. Selecteer naast een van je taken Watch this job. InfraNest maakt direct de heartbeat-monitor aan, en verwacht de taak net zo vaak als het schema aangeeft, met een uur speling voor een nachtelijke taak.
  3. Pas één regel op de server aan: zet infranest-agent run --job "NAME" -- vóór het commando. InfraNest toont je de regel voor en na. Bijvoorbeeld:
# voor
15 3 * * * root /opt/acme/backup.sh
# na
15 3 * * * root infranest-agent run --job "Nightly backup" -- /opt/acme/backup.sh

Dat is alles. Je taak draait precies zoals voorheen, als dezelfde gebruiker, en sluit af met zijn eigen exitcode. Na elke run vertelt de agent aan InfraNest wanneer hij startte, hoelang hij duurde en hoe hij eindigde — er komt geen token in je crontab terecht.

  • Als hij mislukt, gaat de monitor down en toont zijn pagina de exitcode en de laatste 20 regels van de uitvoer van de taak, met wachtwoorden en sleutels gemaskeerd. Voeg --no-output toe om alleen de exitcode te versturen.
  • Als hij helemaal niet draait, gaat de monitor down zodra de respijtperiode is verstreken, zoals bij elke heartbeat.
  • InfraNest past je crontab nooit aan. De agent leest hem alleen.

NoteInfraNest toont de hele regel alleen als je opdrachtregels voor de server hebt ingeschakeld, omdat cron-regels vaak wachtwoorden bevatten. Anders toont het alleen het deel dat je vóór je commando moet zetten.

De eigen crontabs van je gebruikers worden niet getoond: alleen root kan ze lezen, en de agent draait nooit als root. Taken in /etc/crontab, /etc/cron.d en de mappen cron.daily, hourly, weekly en monthly worden wel getoond. Een script in een van die mappen, of een systemd-timer, kan niet op deze manier worden omwikkeld — gebruik in plaats daarvan de ping-URL hieronder.

Als Geplande taken aangeeft dat de agent geen map heeft voor taakrapporten, voer dan het installatieprogramma van de agent opnieuw uit met --upgrade; dit maakt de map aan waar de rapporten naartoe gaan.

Als een onderhoudsvenster zou starten terwijl een taak draait, waarschuwt Geplande taken je daarvoor en biedt het aan om het venster erna te verschuiven.

#Er een handmatig instellen

  1. Ga naar Monitors en selecteer Toevoegen.
  2. Kies Heartbeat / Cron monitor als type.
Een cron-taak of script monitoren
  1. Geef hem een naam die je herkent in een melding — “Nachtelijke databaseback-up” is beter dan “taak 1”.
  2. Stel het controle-interval in op hoe vaak de taak zou moeten draaien.
  3. Stel een respijtperiode in — extra tijd die InfraNest toestaat voordat hij als te laat wordt beschouwd. Een back-up die meestal vier minuten duurt maar af en toe acht minuten, heeft een respijtperiode nodig die ruim langer is dan die uitloop.
  4. Selecteer Aanmaken.

Voor dit type voer je geen URL in — InfraNest maakt er zelf een aan wanneer je opslaat.

#Laat je taak zich melden

Open de monitor en je ziet de ping-URL, plus een kant-en-klare eenregelige opdracht. Voeg die regel toe aan het einde van je script of cron-taak, zodat hij alleen draait als de taak daadwerkelijk is geslaagd:

0 3 * * *  /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 3 https://your-infranest-url/api/heartbeat/your-uuid

De && is belangrijk: dit betekent dat de melding alleen plaatsvindt als de back-up zelf succesvol is afgesloten. Een mislukte taak blijft dan stil, en die stilte is wat de melding activeert.

Gebruik Kopiëren in plaats van de URL opnieuw te typen — de identifier erin is uniek voor deze monitor.

#Meld hoelang de taak duurde

Voeg ?duration= toe met de looptijd van de taak in seconden aan de ping-URL, en de monitor toont Last run took naast de laatste ping. Een taak die elke nacht langzaam langer duurt, is dan makkelijk te herkennen voordat hij zijn respijtperiode overschrijdt. Bijvoorbeeld in een script:

start=$(date +%s)
/usr/local/bin/backup.sh && curl -fsS -m 10 --retry 3 "https://your-infranest-url/api/heartbeat/your-uuid?duration=$(( $(date +%s) - start ))"

Decimalen zijn prima (?duration=4.25). Als de waarde geen getal is, telt de melding nog steeds mee — alleen de looptijd wordt dan weggelaten.

#Vanuit een GitHub Actions-workflow

Als je back-up, vernieuwing of nachtelijke synchronisatie draait als een geplande GitHub Actions-workflow, werkt dezelfde monitor — de workflow meldt zich als laatste stap.

  1. Open in je repository op GitHub Settings → Secrets and variables → Actions en voeg een repository secret toe met de naam HEARTBEAT_URL, met de ping-URL als waarde.
  2. Voeg deze stap toe aan het einde van de taak:
      - name: Check in with InfraNest
        run: curl -fsS -m 10 --retry 3 "$HEARTBEAT_URL"
        env:
          HEARTBEAT_URL: ${{ secrets.HEARTBEAT_URL }}

GitHub slaat de resterende stappen over zodra er één mislukt, waardoor de melding alleen plaatsvindt als alles daarvoor is geslaagd — hetzelfde effect als de && hierboven.

Dit vangt ook iets op wat GitHub niet duidelijk meldt: in een openbare repository schakelt GitHub geplande workflows uit na 60 dagen zonder enige activiteit in de repository. De workflow stopt met draaien, er mislukt niets, en de ontbrekende melding is wat de waarschuwing activeert.

TipGitHub kan geplande workflows enkele minuten te laat starten als het druk is. Geef de monitor een respijtperiode die daarmee rekening houdt, bovenop de eigen looptijd van de taak.

#Wat er daarna gebeurt

  • Elke melding markeert de monitor als Actief en registreert het tijdstip als zijn laatste ping.
  • Een gloednieuwe monitor blijft in afwachting totdat zijn eerste venster is verstreken, zodat je tijd hebt om de melding te koppelen zonder dat je er meteen een waarschuwing over krijgt.
  • Als er niets binnenkomt binnen het interval plus de respijtperiode, gaat de monitor down en opent een incident, waardoor je gebruikelijke meldingsbestemmingen afgaan.
  • De volgende melding lost het incident op en waarschuwt je dat alles weer in orde is — je hoeft het niet handmatig te sluiten.

#Tips

  • Een heartbeat-monitor pauzeren is veilig: de ping-URL blijft gewoon antwoorden, dus een taak die zich nog steeds meldt begint geen storingen te rapporteren. InfraNest stopt simpelweg met kijken totdat je hervat.
  • Behandel de ping-URL als een geheim. Iedereen die hem heeft, kan je taak als gezond rapporteren — wat een echte storing zou verbergen.

#Problemen oplossen

  • Nog geen ping ontvangen op de monitor betekent dat InfraNest helemaal niets van de taak heeft gehoord. Voer de curl-regel handmatig uit vanaf dezelfde machine: als de monitor daardoor groen wordt, zit het probleem in je script, niet hier.
  • Als de machine geen verbinding naar buiten kan maken, kan de melding niet aankomen — sta uitgaand HTTPS naar InfraNest toe.
  • Een monitor die elke nacht op hetzelfde tijdstip een melding geeft, heeft meestal een respijtperiode die korter is dan de werkelijke worst-case looptijd van de taak.

Gerelateerde artikelen

Begin in seconden

Breng je hele infrastructuur samen in één modern dashboard.

Gratis plan · Geen creditcard nodig · In enkele minuten ingesteld