Aide et guidesHeartbeat (cron monitoring) › Ajout au cron job (bash, Python, Node)

Ajout au cron job (bash, Python, Node)

4 min de lecture · Heartbeat (cron monitoring)

Objectif : Ajouter une URL Heartbeat à une tâche cron ou à un script existant afin qu'ePulz.io reçoive un ping "je suis en vie" 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 / cron shell

Ajoutez un appel curl à la fin de la ligne cron, relié par l'opérateur && (il ne s'exécute que si la commande précédente a réussi) :

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

Signification des options curl :

  • -f = échouer en cas de réponse d'erreur (curl renvoie une erreur)
  • -s = silencieux (n'affiche pas la progression)
  • -S = mais affiche les erreurs (combiné avec -s)
  • -m 10 = limite de temps de 10 secondes
  • > /dev/null = la réponse n'inonde pas le journal cron

Python

Pour les scripts Python, ajoutez l'appel via la bibliothèque requests ou le module standard 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 envoye que si sync_data() n'a pas echoue
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # Le heartbeat n'est pas envoye - ePulz.io vous alertera
    print(f"Sync failed: {e}")
    raise

Sans bibliothèque externe, uniquement avec la bibliothèque standard :

import urllib.request

# Apres la reussite de la tache
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 uniquement apres la reussite
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // Le heartbeat n'est pas envoye, ePulz.io vous alertera
});

Docker / minuteur systemd

Si vous utilisez un minuteur systemd, ajoutez la ligne 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 s'est terminé avec succès.

Planificateur PHP / Laravel

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

Laravel dispose d'une méthode thenPing() intégrée précisément à cet effet.

Test - simuler une seule exécution

Avant de l'ajouter à cron, testez l'URL manuellement :

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

Après un appel réussi, dans l'aperçu ePulz.io vous verrez le statut du moniteur passer de En attente à OK.

Ce guide vous a-t-il été utile ?