Pomoc a návodyHeartbeat (cron monitoring) › Pridanie do cron jobu (bash, Python, Node)

Pridanie do cron jobu (bash, Python, Node)

4 min čítania · Heartbeat (cron monitoring)

Cieľ: Pridať Heartbeat adresu do existujúcej cron úlohy alebo skriptu, aby ePulz.io dostával ping "som živý" po každom úspešnom behu.

Princíp

Heartbeat adresu voláte po úspešnom dokončení úlohy. Ak skript zlyhá, adresa sa nezavolá, ePulz.io si všimne chýbajúci ping a pošle vám upozornenie.

Bash / shell cron

Pridajte volanie curl na koniec cron riadku, spojené operátorom && (spustí sa len pri úspechu predošlého príkazu):

# /etc/crontab alebo crontab -e
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 \
  https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj > /dev/null

Význam prepínačov curl:

  • -f = zlyhať pri chybovej odpovedi (curl vráti chybu)
  • -s = ticho (nepíše priebeh)
  • -S = ale zobrazí chyby (kombinácia s -s)
  • -m 10 = časový limit 10 sekúnd
  • > /dev/null = odpoveď nepreplní cron log

Python

Pre Python skripty pridajte volanie cez knižnicu requests alebo štandardný urllib:

import os
import requests

HEARTBEAT_URL = os.environ.get("HEARTBEAT_URL")

def sync_data():
    # ... vaša logika ...
    pass

try:
    sync_data()
    # Heartbeat sa pošle iba ak sync_data() nespadne s chybou
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # Heartbeat sa nepošle - ePulz.io vás upozorní
    print(f"Sync failed: {e}")
    raise

Bez externej knižnice, len so štandardnou:

import urllib.request

# Po úspešnom dokončení úlohy
urllib.request.urlopen("https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj", timeout=10)

Node.js

const HEARTBEAT_URL = process.env.HEARTBEAT_URL;

async function nightlyJob() {
  await processInvoices();
  // Heartbeat až po úspešnom dokončení
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // Heartbeat sa nepošle, ePulz.io vás upozorní
});

Docker / systemd timer

Pri použití systemd timera pridajte do .service súboru riadok ExecStartPost:

# /etc/systemd/system/db-backup.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
ExecStartPost=/usr/bin/curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj

ExecStartPost sa spustí iba vtedy, ak ExecStart dobehol úspešne.

PHP / Laravel scheduler

// app/Console/Kernel.php
$schedule->command('backup:run')
    ->daily()
    ->thenPing('https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj');

Laravel má vstavanú metódu thenPing() presne na tento účel.

Test - simulácia jedného behu

Pred zaradením do cronu otestujte adresu ručne:

$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK

Po úspešnom volaní v prehľade ePulz.io uvidíte, ako stav monitora prejde z Čaká sa na OK.

Bol tento návod užitočný?