Ajout au cron job (bash, Python, Node)
Objectif : ajouter une URL heartbeat à un cron job ou script existant, pour qu'ePulz.io reçoive un ping "je suis vivant" après chaque exécution réussie.
Principe
Vous appelez l'URL heartbeat après la réussite de la tâche. Si le script échoue, l'URL n'est pas appelée, ePulz.io remarque le ping manquant et vous envoie une alerte.
Bash / shell cron
Ajoutez l'appel curl à la fin de votre ligne cron, relié par l'opérateur && :
# /etc/crontab ou crontab -e
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 \
https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj > /dev/null
Flags curl :
-f= fail sur une réponse non-2xx (curl retourne une erreur)-s= silent (n'écrit pas la progression)-S= mais affiche les erreurs (combinaison avec -s)-m 10= max-time 10 secondes (timeout)> /dev/null= la réponse n'encombre pas le log cron
Python
Pour les scripts Python, ajoutez l'appel via requests ou urllib :
import os
import requests
HEARTBEAT_URL = os.environ.get("HEARTBEAT_URL")
def sync_data():
# ... votre logique ...
pass
try:
sync_data()
# Le heartbeat n'est envoyé que si sync_data() ne lève pas d'exception
if HEARTBEAT_URL:
requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
# Le heartbeat n'est pas envoyé - ePulz.io vous avertit
print(f"Sync failed: {e}")
raise
Sans bibliothèque externe, uniquement avec la standard :
import urllib.request
# Après la réussite de la tâche
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 seulement après la réussite
await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}
nightlyJob().catch(err => {
console.error(err);
process.exit(1); // Le heartbeat n'est pas envoyé, ePulz.io vous avertit
});
Docker / systemd timer
Pour un timer systemd, ajoutez ExecStartPost au fichier .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 ne s'exécute que si ExecStart a réussi.
PHP / Laravel scheduler
// app/Console/Kernel.php
$schedule->command('backup:run')
->daily()
->thenPing('https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj');
Laravel a une méthode intégrée thenPing() précisément pour cet usage.
Avancé : ping au début et à la fin
Pour une détection plus approfondie, vous pouvez aussi envoyer un ping "start" (la tâche a démarré) - vous distinguez ainsi "la tâche n'a pas du tout commencé" de "la tâche s'est bloquée" :
# Start ping
curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj/start > /dev/null
# Votre tâche
/usr/local/bin/backup.sh
EXIT_CODE=$?
# Done ping avec exit code
curl -fsS -m 10 "https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj?exit=$EXIT_CODE" > /dev/null
Test - simulation d'une exécution
Avant d'ajouter au cron, testez l'URL manuellement :
$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK
Après un appel réussi, dans le tableau de bord ePulz.io, vous verrez l'état du moniteur passer de Pending à OK.