Súgó és útmutatókHeartbeat (cron monitoring) › Cron jobhoz hozzáadás

Cron jobhoz hozzáadás

4 perc olvasás · Heartbeat (cron monitoring)

Cél: A heartbeat URL hozzáadása egy meglévő cron jobhoz vagy scripthez, hogy az ePulz.io "élek" pinget kapjon minden sikeres futás után.

Elv

A heartbeat URL-t sikeres befejezés után hívja. Ha a script elbukik, az URL nem hívódik meg, az ePulz.io észreveszi a hiányzó pinget és riasztást küld.

Bash / shell cron

Adja hozzá a curl hívást a cron sor végéhez a && operátorral összekötve:

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

curl flag-ek:

  • -f = fail non-2xx response esetén (a curl error-t ad vissza)
  • -s = silent (nem ír progresst)
  • -S = de megmutatja az errorokat (kombináció a -s-sel)
  • -m 10 = max-time 10 másodperc (timeout)
  • > /dev/null = a response nem tölti túl a cron logot

Python

Python scriptekhez adja hozzá a hívást a requests vagy urllib-en keresztül:

import os
import requests

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

def sync_data():
    # ... a logikája ...
    pass

try:
    sync_data()
    # A heartbeat csak akkor megy, ha a sync_data() nem raise-el exceptiont
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # A heartbeat nem megy - az ePulz.io figyelmezteti
    print(f"Sync failed: {e}")
    raise

Külső könyvtár nélkül, csak standarddal:

import urllib.request

# A feladat sikeres befejezése után
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 csak sikeres befejezés után
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // A heartbeat nem megy, az ePulz.io figyelmezteti
});

Docker / systemd timer

systemd timerhez adjon hozzá ExecStartPost-ot a .service fájlhoz:

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

Az ExecStartPost csak akkor fut, ha az ExecStart sikeres volt.

PHP / Laravel scheduler

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

A Laravelnek beépített thenPing() metódusa van pontosan erre a célra.

Haladó: ping az elején és végén is

Pontosabb észleléshez "start" pinget is küldhet (a feladat elindult) - ezzel megkülönbözteti az "a feladat egyáltalán nem indult"-ot az "a feladat beragadt"-tól:

# Start ping
curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj/start > /dev/null

# A feladata
/usr/local/bin/backup.sh
EXIT_CODE=$?

# Done ping exit code-dal
curl -fsS -m 10 "https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj?exit=$EXIT_CODE" > /dev/null

Teszt - egy futás szimulációja

Mielőtt cron-ba helyezné, tesztelje az URL-t manuálisan:

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

A sikeres hívás után az ePulz.io vezérlőpultban látja, hogy a monitor állapota átmegy Pending-ből OK-ra.