# Surveiller une tâche planifiée

Un site qui tombe se voit. Une sauvegarde nocturne qui ne tourne plus, non. Un moniteur **heartbeat** attend un signal de ta tâche : si le signal n’arrive pas dans les temps, Status alerte.

**Avant de commencer** : une tâche capable d’appeler une adresse HTTPS en fin d’exécution (une ligne de `curl` suffit), et une organisation dans Status.

## Créer le heartbeat

1. Ouvre **Moniteurs**, puis clique **Créer un heartbeat**.
2. Donne un nom clair, par exemple « Sauvegarde nocturne ».
3. Règle le **Signal attendu** : le délai maximal entre deux signaux. Pour une sauvegarde quotidienne, 86 400 secondes.
4. Règle la **Tolérance** : le retard admis avant l’alerte. 300 secondes par défaut.
5. Enregistre. Status affiche l’**Adresse de ping** propre à ce heartbeat.

Garde l’adresse de ping secrète : qui la connaît peut signaler un succès à ta place.

Tant qu’aucun signal n’est arrivé, le heartbeat reste en attente, et aucune fausse alerte ne part.

## Ajouter le signal à la tâche

Ajoute un appel en fin de tâche :

```sh
# en fin de script, après une réussite
curl -fsS -m 10 --retry 3 "<adresse de ping>" > /dev/null
```

Pour signaler un échec, appelle la même adresse suivie de `/fail`. Pour mesurer la durée, appelle `/start` au début. Le détail de chaque adresse est dans la [référence des heartbeats](/docs/reference/heartbeats/).

N’entoure pas l’appel d’un bloc qui masque les erreurs : si la tâche échoue, le signal doit échouer aussi.

## Tester

Lance la tâche à la main une fois. Le heartbeat reçoit son premier signal, et l’heure du **Dernier signal** s’affiche. Pour tester l’alerte, laisse passer le signal attendu et la tolérance sans rien envoyer : l’alerte de panne part.

## Si ça ne marche pas

- **Le heartbeat reste en attente.** Aucun signal n’est arrivé. Vérifie que la commande a bien été exécutée, et regarde son code de retour.
- **Une alerte part alors que la tâche a tourné.** La tâche a peut-être fini après le signal attendu plus la tolérance. Augmente la tolérance, ou mesure la durée avec `/start`.
- **Le signal est refusé.** L’adresse a été mal copiée. Recopie-la depuis la fiche du heartbeat.
- **Le serveur ne joint pas Status.** Un pare-feu sortant bloque l’appel HTTPS. Autorise la sortie vers Status.
- **Le corps du signal est trop gros.** Un corps de plus de 100 Ko est refusé. Pour les sorties longues, utilise `/log` : il ne change pas l’état du heartbeat.
