← Tous les guides

Guide · Sauvegarde

Surveiller les sauvegardes Restic avec un dead man's switch

Restic vous prévient quand une sauvegarde échoue, à condition que le job cron s'exécute. Si le timer est désactivé, la machine est éteinte, ou le script plante avant même que restic ne démarre, vous ne saurez rien. Un check-in depuis le script d'enrobage comble ce trou.

1. Créez un check

Créez un check dans Mortemain correspondant au planning de votre sauvegarde (par exemple tous les jours à 02h00), avec une fenêtre de grâce couvrant la durée habituelle de la sauvegarde et du nettoyage. Copiez l'URL de ping du check.

2. Enrobez la sauvegarde dans un script

Utilisez set -e et un trap pour que toute commande en échec, restic lui-même, un dépôt injoignable, un disque plein, fasse le check-in sur /fail immédiatement, plutôt que de laisser le check simplement devenir silencieux :

 /usr/local/bin/restic-backup.sh
#!/usr/bin/env bash
set -euo pipefail

PING_URL="https://ping.mortemain.com/votre-uuid-de-check"

# toute erreur ci-dessous déclenche ceci avant la sortie du script
trap 'curl -fsS -m 10 --retry 3 "$PING_URL/fail" >/dev/null' ERR

export RESTIC_REPOSITORY="s3:s3.amazonaws.com/your-bucket/restic"
export RESTIC_PASSWORD_FILE="/etc/restic/password"

# optionnel : signale le début du run pour que Mortemain suive la durée
curl -fsS -m 10 --retry 3 "$PING_URL/start" >/dev/null

restic backup /etc /home /var/www --exclude-caches

# optionnel : purger les anciens snapshots dans le même run
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

# atteint uniquement si toutes les commandes ci-dessus sont sorties en 0
curl -fsS -m 10 --retry 3 "$PING_URL" >/dev/null

Avec set -e, le code de sortie de restic fait le travail à votre place : une sortie non nulle de restic backup ou restic forget déclenche le trap ERR et fait le check-in sur /fail avant que le script ne s'arrête. Rien à vérifier manuellement.

3. Planifiez avec cron

Lancez le script d'enrobage selon le même planning que celui configuré sur le check :

 crontab -e
0 2 * * * /usr/local/bin/restic-backup.sh >> /var/log/restic-backup.log 2>&1

Gardez la redirection vers le log, c'est le premier endroit à regarder quand une alerte /fail arrive.

4. Testez

Lancez le script à la main une fois, le check passe actif. Puis pointez RESTIC_REPOSITORY vers un chemin bidon et relancez : restic sort en erreur, le trap se déclenche, et l'alerte /fail devrait arriver en quelques secondes. Enfin, commentez complètement la ligne cron et confirmez que l'alerte de panne arrive une fois la fenêtre de grâce expirée : le seul mode de panne que Restic ne peut jamais signaler lui-même.