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: Heartbeat cím hozzáadása egy meglévő cron feladathoz vagy szkripthez, hogy az ePulz.io minden sikeres futás után megkapja az "élek" pinget.

Működési elv

A Heartbeat címet a feladat sikeres befejezése után hívja meg. Ha a szkript hibázik, a cím nem hívódik meg, az ePulz.io észreveszi a hiányzó pinget, és értesítést küld Önnek.

Bash / shell cron

Adjon hozzá egy curl hívást a cron sor végéhez, az && operátorral összekötve (csak akkor fut le, ha az előző parancs sikeres volt):

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

A curl kapcsolók jelentése:

  • -f = hiba esetén meghiúsul (a curl hibát ad vissza)
  • -s = csendes (nem írja ki a folyamatot)
  • -S = de megjeleníti a hibákat (a -s kapcsolóval kombinálva)
  • -m 10 = 10 másodperces időkorlát
  • > /dev/null = a válasz nem árasztja el a cron naplót

Python

Python szkriptekhez adja hozzá a hívást a requests könyvtáron vagy a szabványos urllib modulon keresztül:

import os
import requests

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

def sync_data():
    # ... az Ön logikája ...
    pass

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

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

import urllib.request

# A feladat sikeres befejezese utan
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 a sikeres befejezes utan
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

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

Docker / systemd időzítő

Systemd időzítő használata esetén adja hozzá a .service fájlhoz az ExecStartPost sort:

# /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 le, ha az ExecStart sikeresen befejeződött.

PHP / Laravel ütemező

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

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

Teszt - egyetlen futás szimulálása

Mielőtt felvenné a cronba, tesztelje a címet manuálisan:

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

Sikeres hívás után az ePulz.io áttekintőben látni fogja, ahogy a monitor állapota Várakozás állapotból OK állapotba vált.

Hasznos volt ez az útmutató?