← Tous les guides

Guide · Sauvegardes

Surveiller rsync avec un interrupteur « homme mort »

rsync échoue en silence : un hôte qui ne répond plus, un disque plein ou une destination cassée peuvent arrêter votre synchro ou votre sauvegarde sans que personne ne s'en aperçoive. Enveloppez-le dans un script qui pingue Mortemain sur succès et sur échec.

1. Créez un check

Créez un check dans Mortemain avec le calendrier et la fenêtre de tolérance de votre job, et copiez son URL de ping unique. Elle ressemble à ceci (l'UUID est le seul secret, gardez-le impossible à deviner) :

 votre URL de ping
https://ping.mortemain.com/votre-uuid-de-check

2. Enveloppez rsync et vérifiez son code de sortie

Lancez rsync depuis un petit script, récupérez son code de sortie, et faites le check-in sur le bon endpoint selon le résultat. Évitez set -e ici, vous avez besoin du code de sortie en main avant de décider quoi en faire :

 rsync-backup.sh
#!/usr/bin/env bash
set -uo pipefail   # pas de -e : on a besoin du code de sortie de rsync ci-dessous
URL=https://ping.mortemain.com/votre-uuid-de-check

rsync -az --delete /data/ backup-host:/backups/data/
rc=$?

# 24 = des fichiers source ont disparu pendant la lecture, courant sur un système de fichiers vivant
if [ "$rc" -eq 0 ] || [ "$rc" -eq 24 ]; then
  curl -fsS -m 10 "$URL"
else
  curl -fsS -m 10 "$URL/fail"
  exit "$rc"
fi

Le code de sortie 24 de rsync signifie juste que des fichiers source ont disparu pendant sa lecture, fréquent quand on sauvegarde un système de fichiers encore en écriture. Traitez-le comme un succès ; tout autre code non nul est un vrai échec qui mérite une alerte.

3. Ajoutez la ligne cron

Pointez cron vers le script. Puisque le script rapporte lui-même son résultat, la ligne cron reste simple :

 crontab
# chaque nuit à 02h00 ; rsync-backup.sh pingue Mortemain lui-même
0 2 * * *  /usr/local/bin/rsync-backup.sh

Vous préférez une ligne sans script séparé ? Chaînez-la, mais notez que cela traite le code de sortie 24 comme un échec aussi :

 crontab (simple)
# tout code de sortie rsync non nul, y compris 24, compte comme un échec ici
0 2 * * *  rsync -az --delete /data/ backup-host:/backups/data/ && curl -fsS -m 10 https://ping.mortemain.com/votre-uuid-de-check || curl -fsS -m 10 https://ping.mortemain.com/votre-uuid-de-check/fail

4. Mesurez la durée (optionnel)

Faites le check-in sur /start juste avant que rsync démarre, et Mortemain enregistrera la durée de chaque exécution : une synchro qui prend soudain 5× plus longtemps devient un avertissement, pas une surprise.

 rsync-backup.sh
curl -fsS -m 10 "$URL/start"
rsync -az --delete /data/ backup-host:/backups/data/
rc=$?

Testez

Lancez le script une fois à la main. Le check passe actif en une seconde ou deux. Puis pointez-le vers une destination qui n'existe pas et relancez-le : vous devriez recevoir l'alerte d'échec immédiatement, sans attendre l'expiration de la fenêtre.