Pridanie do cron jobu (bash, Python, Node)
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.