Guide : les heartbeats
Sachez quand une tâche cron, une sauvegarde ou une tâche planifiée s’arrête sans bruit
La plupart des tâches planifiées échouent en silence : la sauvegarde ne tourne plus et personne ne le remarque avant le jour où on en a besoin. Un heartbeat attend que votre tâche se manifeste, et vous alerte quand elle ne le fait pas.
Fonctionnement
Les moniteurs de sites et de serveurs vérifient de l’extérieur. Une tâche qui tourne selon son propre horaire n’a rien à visiter : un heartbeat fonctionne donc dans l’autre sens, c’est la tâche qui appelle Monitorizer.
Votre tâche se manifeste
Chaque heartbeat a une adresse privée. Votre tâche cron, sauvegarde ou script l’appelle quand elle se termine, avec curl, PowerShell ou toute requête HTTP.
Monitorizer sait quand l’attendre
Vous indiquez quand la tâche s’exécute : toutes les 15 minutes, chaque jour, chaque lundi, le 1er de chaque mois, ou selon n’importe quel horaire cron.
Vous êtes alerté quand elle ne le fait pas
Quand un appel est en retard, que la tâche signale un échec ou qu’une tâche commencée ne se termine jamais, votre Mac vous alerte sur vos canaux habituels.
Mise en place en trois étapes
- 1
Ajoutez un moniteur heartbeat
Sur le site : Moniteurs, Ajouter un moniteur, Heartbeat. Dans l’app Mac : Ajouter, Heartbeat. Donnez-lui un nom clair, comme « Sauvegarde nocturne, serveur boutique ». Les heartbeats demandent votre compte, puisque les appels arrivent sur le site.
- 2
Collez votre ligne crontab
Collez la ligne de la tâche depuis crontab -e : l’horaire, un nom et un délai de grâce sont remplis pour vous. Pas de ligne crontab (Windows, GitHub Actions) ? Réglez l’intervalle ou l’horaire à la main. Vérifiez le fuseau horaire : celui de la machine qui exécute la tâche.
- 3
Recopiez la ligne
Enregistrez. La page du moniteur vous rend la ligne avec le signal ajouté, en version simple ou avec signalement des échecs. Remplacez l’ancienne ligne par celle-ci : le premier signal apparaît quelques secondes après la prochaine exécution.
Intervalle ou horaire cron ?
À intervalle fixe
Pour les tâches qui tournent toutes les N minutes, heures, jours ou semaines, à compter du dernier appel. Si la tâche tourne toutes les 6 heures, choisissez 6 heures. Le prochain appel est attendu 6 heures après le dernier, quelle que soit son heure.
Selon un horaire cron
Pour les tâches à heure fixe : chaque jour à 03:00, en semaine seulement, chaque lundi, le 1er ou le dernier jour de chaque mois. Aucun intervalle fixe ne correspond à une tâche mensuelle (les mois ont de 28 à 31 jours) : utilisez un horaire. Collez les mêmes cinq champs que dans votre crontab.
Un horaire cron a cinq champs, séparés par des espaces :
┌───────── minute (0 à 59)
│ ┌─────── heure (0 à 23)
│ │ ┌───── jour du mois (1 à 31, L = dernier)
│ │ │ ┌─── mois (1 à 12)
│ │ │ │ ┌─ jour de la semaine (0 à 6, dimanche = 0)
│ │ │ │ │
0 3 1 * *| Horaire | Signification |
|---|---|
*/5 * * * * | Toutes les 5 minutes |
0 * * * * | Toutes les heures |
0 3 * * * | À 03:00 |
30 8 * * 1-5 | À 08:30, de lundi à vendredi |
0 3 * * 1 | À 03:00, uniquement le lundi |
0 3 1 * * | À 03:00, le 1 du mois |
0 3 L * * | À 03:00, le dernier jour du mois |
0 4 1 */3 * | À 04:00, le 1 du mois, tous les 3 mois |
*/15 9-17 * * 1-5 | Toutes les 15 minutes, de 09:00 à 17:59, de lundi à vendredi |
Choisissez le fuseau horaire de la machine qui exécute la tâche, pour que « 03:00 » veuille dire la même chose des deux côtés. Les changements d’heure sont gérés pour vous.
Choisir le délai de grâce
Le délai de grâce est le temps pendant lequel un appel peut encore arriver après l’heure prévue. Il couvre la durée de la tâche et les petits retards. Trop court, il donne de fausses alertes ; trop long, il retarde les vraies.
- Une tâche rapide (quelques secondes) toutes les 5 à 15 minutes : 5 minutes.
- Une tâche horaire de quelques minutes : 15 à 30 minutes.
- Une sauvegarde nocturne de 20 minutes : 1 heure.
- Une tâche hebdomadaire ou mensuelle qui peut durer des heures : 2 à 6 heures.
- En règle générale : la plus longue durée jamais observée, plus une marge.
L’adresse de signal
Les requêtes GET, POST et HEAD fonctionnent toutes : tout outil capable d’ouvrir une adresse web peut envoyer un signal.
/hb/<adresse> | La tâche s’est bien terminée. C’est le seul appel nécessaire. |
/hb/<adresse>/start | Facultatif, au début de la tâche. Vous voyez alors la durée de chaque exécution, et une tâche commencée mais jamais terminée est signalée. |
/hb/<adresse>/fail | La tâche a échoué. Vous êtes alerté aussitôt, sans attendre la fin du délai de grâce. |
Corps POST ou ?msg= | Ce que la tâche envoie (par exemple la fin de son journal) est conservé avec le signal et affiché dans l’alerte. Les 1 000 derniers caractères sont gardés. |
Gardez l’adresse privée, comme un mot de passe : quiconque la connaît peut envoyer des appels pour ce moniteur. Si elle fuit, supprimez le moniteur et créez-en un nouveau, qui aura une nouvelle adresse.
Exemples
Remplacez YOUR-ADDRESS par l’adresse affichée sur la page de votre moniteur (avec des boutons pour la copier).
# L’appel n’est fait que si la sauvegarde a réussi (&&).
0 3 * * * /home/me/backup.sh && curl -fsS -m 10 --retry 3 -o /dev/null https://monitorizer.ai.tn/hb/YOUR-ADDRESS#!/bin/sh
# Signale le début, la fin, et un échec avec la fin du journal.
HB=https://monitorizer.ai.tn/hb/YOUR-ADDRESS
curl -fsS -m 10 -o /dev/null $HB/start
if /home/me/backup.sh > /tmp/backup.log 2>&1; then
curl -fsS -m 10 -o /dev/null $HB
else
tail -c 1000 /tmp/backup.log | curl -fsS -m 10 -o /dev/null --data-binary @- $HB/fail
fi# /etc/systemd/system/backup.service
[Service]
Type=oneshot
ExecStart=/home/me/backup.sh
ExecStartPost=/usr/bin/curl -fsS -m 10 -o /dev/null https://monitorizer.ai.tn/hb/YOUR-ADDRESS# Lancez ce script depuis la tâche planifiée.
& "C:\Scripts\backup.ps1"
if ($?) { Invoke-RestMethod https://monitorizer.ai.tn/hb/YOUR-ADDRESS }
else { Invoke-RestMethod -Method Post -Body "Backup failed" https://monitorizer.ai.tn/hb/YOUR-ADDRESS/fail }# .github/workflows/nightly.yml
on:
schedule:
- cron: "0 3 * * *"
jobs:
nightly:
runs-on: ubuntu-latest
steps:
- run: ./nightly.sh
- run: curl -fsS -m 10 ${{ secrets.HEARTBEAT_URL }}
- if: failure()
run: curl -fsS -m 10 ${{ secrets.HEARTBEAT_URL }}/fail<?php
// À la fin de la tâche planifiée.
run_my_task();
file_get_contents('https://monitorizer.ai.tn/hb/YOUR-ADDRESS');
// WordPress: wp_remote_get('https://monitorizer.ai.tn/hb/YOUR-ADDRESS');try {
await runJob();
await fetch("https://monitorizer.ai.tn/hb/YOUR-ADDRESS");
} catch (error) {
await fetch("https://monitorizer.ai.tn/hb/YOUR-ADDRESS/fail", { method: "POST", body: String(error) });
}import urllib.request
try:
run_job()
urllib.request.urlopen("https://monitorizer.ai.tn/hb/YOUR-ADDRESS", timeout=10)
except Exception as error:
urllib.request.urlopen("https://monitorizer.ai.tn/hb/YOUR-ADDRESS/fail", data=str(error).encode(), timeout=10)Questions
Que se passe-t-il si mon Mac est éteint ?
Les appels sont quand même reçus et conservés par le site. Les alertes sont envoyées par votre Mac : un appel manqué est signalé dès que le Mac est rallumé. Pour être alerté à toute heure, gardez un Mac toujours allumé connecté à votre compte.
Et si la tâche échoue mais appelle quand même l’adresse ?
Placez l’appel après la tâche avec && (ou vérifiez le résultat, comme dans les exemples), pour qu’il ne soit fait qu’en cas de réussite. Ou appelez /fail en cas d’échec, pour être alerté aussitôt.
Un heartbeat compte-t-il dans mon forfait ?
Oui, chaque heartbeat compte comme un moniteur.
Puis-je voir les appels passés ?
La page du moniteur liste les derniers appels avec leur heure, leur résultat, leur durée, leur message et l’adresse d’où ils viennent. Sa disponibilité et ses incidents fonctionnent comme pour tout autre moniteur.
Puis-je changer l’horaire plus tard ?
Oui, sur le site ou dans l’app Mac. L’adresse de signal reste la même : la tâche n’a pas à changer.
Y a-t-il une limite d’appels ?
Jusqu’à 120 appels par minute et par adresse, bien plus que ce dont une tâche planifiée a besoin.
Surveillez votre première tâche en deux minutes
Ajoutez un heartbeat, collez une ligne dans votre crontab, et ne vous demandez plus si la sauvegarde de la nuit a tourné.
Créer un heartbeat