Přidání do cron jobu (bash, Python, Node)
Cíl: Přidat heartbeat URL do existujícího cron jobu nebo skriptu, aby ePulz.io dostával "jsem živý" ping po každém úspěšném běhu.
Princip
Heartbeat URL voláte po úspěšném dokončení úlohy. Pokud skript selže, URL se nezavolá, ePulz.io si všimne chybějící ping a pošle vám alert.
Bash / shell cron
Přidejte curl volání na konec svého cron řádku spojené operátorem &&:
# /etc/crontab nebo crontab -e
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 \
https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj > /dev/null
Flagy curl:
-f= fail na non-2xx response (curl vrátí error)-s= silent (nepíše progress)-S= ale ukáže errors (kombinace s -s)-m 10= max-time 10 sekund (timeout)> /dev/null= response nezahltí cron log
Python
Pro Python skripty přidejte volání přes requests nebo urllib:
import os
import requests
HEARTBEAT_URL = os.environ.get("HEARTBEAT_URL")
def sync_data():
# ... vaše logika ...
pass
try:
sync_data()
# Heartbeat se pošle pouze pokud sync_data() neraisne exception
if HEARTBEAT_URL:
requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
# Heartbeat se nepošle - ePulz.io vás upozorní
print(f"Sync failed: {e}")
raise
Bez externí knihovny, jen se standardní:
import urllib.request
# Po úspěšném 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 úspěšném dokončení
await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}
nightlyJob().catch(err => {
console.error(err);
process.exit(1); // Heartbeat se nepošle, ePulz.io vás upozorní
});
Docker / systemd timer
Pro systemd timer, přidejte ExecStartPost do .service souboru:
# /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 se spustí pouze pokud ExecStart byl úspěšný.
PHP / Laravel scheduler
// app/Console/Kernel.php
$schedule->command('backup:run')
->daily()
->thenPing('https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj');
Laravel má vestavěnou metodu thenPing() přesně pro tento účel.
Pokročilé: ping na začátku i konci
Pro důkladnější detekci můžete poslat i "start" ping (úloha se spustila) - rozlišíte tím "úloha vůbec nezačala" od "úloha se zasekla":
# Start ping
curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj/start > /dev/null
# Vaše úloha
/usr/local/bin/backup.sh
EXIT_CODE=$?
# Done ping s exit code
curl -fsS -m 10 "https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj?exit=$EXIT_CODE" > /dev/null
Test - simulace jednoho běhu
Před zařazením do cronu otestujte URL ručně:
$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK
Po úspěšném volání v ePulz.io dashboardu uvidíte stav monitoru přejít z Pending na OK.