Aggiungi al cron job
Obiettivo: aggiungere l'URL heartbeat a un cron job o script esistente, in modo che ePulz.io riceva un ping "sono vivo" dopo ogni esecuzione riuscita.
Principio
Chiami l'URL heartbeat dopo il completamento con successo dell'attività. Se lo script fallisce, l'URL non viene chiamato, ePulz.io nota il ping mancante e ti invia un alert.
Cron bash / shell
Aggiungi la chiamata curl alla fine della tua riga cron unita con l'operatore &&:
# /etc/crontab oppure crontab -e
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 \
https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj > /dev/null
Flag di curl:
-f= fail con una response non 2xx (curl restituisce errore)-s= silent (non stampa il progress)-S= ma mostra gli errori (combinato con -s)-m 10= max-time 10 secondi (timeout)> /dev/null= la response non riempie il log di cron
Python
Per gli script Python aggiungi la chiamata tramite requests o urllib:
import os
import requests
HEARTBEAT_URL = os.environ.get("HEARTBEAT_URL")
def sync_data():
# ... la tua logica ...
pass
try:
sync_data()
# L'heartbeat viene inviato solo se sync_data() non solleva eccezioni
if HEARTBEAT_URL:
requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
# L'heartbeat non viene inviato - ePulz.io ti avvisa
print(f"Sync failed: {e}")
raise
Senza libreria esterna, solo con la standard:
import urllib.request
# Dopo il completamento con successo dell'attività
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 solo dopo il completamento con successo
await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}
nightlyJob().catch(err => {
console.error(err);
process.exit(1); // L'heartbeat non viene inviato, ePulz.io ti avvisa
});
Docker / systemd timer
Per il timer systemd aggiungi ExecStartPost al file .service:
# /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 viene eseguito solo se ExecStart è andato a buon fine.
PHP / Laravel scheduler
// app/Console/Kernel.php
$schedule->command('backup:run')
->daily()
->thenPing('https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj');
Laravel ha il metodo integrato thenPing() esattamente per questo scopo.
Avanzato: ping all'inizio e alla fine
Per un rilevamento più accurato puoi inviare anche un ping "start" (l'attività è partita) - in questo modo distingui "l'attività non è proprio partita" da "l'attività si è bloccata":
# Start ping
curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj/start > /dev/null
# La tua attività
/usr/local/bin/backup.sh
EXIT_CODE=$?
# Done ping con exit code
curl -fsS -m 10 "https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj?exit=$EXIT_CODE" > /dev/null
Test - simulazione di una singola esecuzione
Prima di inserirlo nel cron prova l'URL manualmente:
$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK
Dopo la chiamata riuscita, nella dashboard di ePulz.io vedrai lo stato del monitor passare da Pending a OK.