# Heartbeats

Un heartbeat reçoit des signaux HTTP de ta tâche. Chaque adresse porte le jeton du heartbeat, visible dans sa fiche sous **Adresse de ping**.

## Adresses

| Adresse                | Effet                                                                           |
| ---------------------- | ------------------------------------------------------------------------------- |
| `/ping/<jeton>`        | Succès : la tâche s’est terminée correctement                                   |
| `/ping/<jeton>/fail`   | Échec : la tâche a échoué, alerte immédiate                                     |
| `/ping/<jeton>/start`  | Début de tâche : enregistre l’heure de départ, pour mesurer la durée            |
| `/ping/<jeton>/<code>` | Code de sortie, de `0` à `255` : `0` est un succès, toute autre valeur un échec |
| `/ping/<jeton>/log`    | Message libre, accepté et conservé, sans effet sur l’état                       |

Le corps d’un signal fait 100 Ko au plus.

Le jeton fait de 8 à 64 caractères, lettres, chiffres, `_` et `-` seulement.

## Règles de délai

- Le heartbeat est en attente tant qu’il n’a reçu aucun signal. Aucune alerte ne part dans cet état.
- Dès le premier signal, Status attend le signal attendu plus la tolérance. Sans signal dans ce délai, le heartbeat passe **En panne**.
- Une panne de heartbeat est annoncée directement : Status ne la confirme pas depuis d’autres points, puisque la tâche n’est pas un service qu’on peut sonder.
- Un signal `/fail` ou un code non nul passe le heartbeat en panne sans attendre l’échéance.

## Exemple

Remplace l’adresse par celle affichée dans la fiche du heartbeat.

```sh
#!/bin/sh
set -e
curl -fsS -m 10 --retry 3 "<adresse de ping>/start" > /dev/null
/usr/local/bin/sauvegarde.sh
curl -fsS -m 10 --retry 3 "<adresse de ping>/0" > /dev/null
```

Si le script échoue, `set -e` l’arrête avant le signal de succès : Status alerte à l’échéance. Pour signaler l’échec tout de suite, ajoute un `trap` qui appelle l’adresse suivie de `/fail`.

## Compatibilité

Les adresses reprennent le format de Healthchecks.io. Un script déjà écrit pour cet outil demande surtout de changer l’adresse et le jeton. Les chemins `/start`, `/fail`, `/log` et `/<code de sortie>` existent. Les adresses par nom (`/ping/<clé>/<nom>`) de Healthchecks.io ne sont pas reprises : chaque heartbeat a son jeton.

Voir aussi : [surveiller une tâche planifiée](/docs/guides/surveiller-une-tache-planifiee/).
