Une tâche de sauvegarde qui cesse de fonctionner ne l'annonce presque jamais. Le courrier de cron va dans une boîte que personne ne lit, le script sort avec un code d'erreur dans le vide, et l'échec se découvre le seul jour où l'on en avait besoin. Le remède est de surveiller le succès, pas l'échec.

Découvrez ce qui s'est passé

journalctl -u backup.service -n 100 --no-pager
tail -100 /var/log/backup.log
ls -la /srv/backup/ | tail          # has anything arrived recently

Les quatre causes habituelles

  • Plus de place — la destination s'est remplie. df -h. La conservation ne fait pas le ménage : voir Conservation.
  • Identifiants expirés — une clé renouvelée ou un jeton S3 : la copie s'écrit en local et ne part jamais.
  • Un fichier illisible — les droits ont changé, et rsync ou tar sort avec un code d'erreur alors que l'essentiel est fait.
  • Le dump de la base a échoué — un verrou expiré ou un droit manquant, tandis que la partie fichiers a réussi et que l'exécution semblait bonne.

Faites échouer le script bruyamment

#!/usr/bin/env bash
set -euo pipefail        # stop at the first error, and at an unset variable
trap 'echo "BACKUP FAILED at line $LINENO" | mail -s "backup failed" ops@example.com' ERR

Sans set -o pipefail, mysqldump | gzip annonce un succès dès que gzip réussit — même si mysqldump est mort à mi-chemin. Cette seule option manquante est la raison la plus fréquente pour laquelle un fichier tronqué est rangé comme bon.

Alertez sur le silence, pas sur les erreurs

Faites en sorte que la tâche envoie un signal à un dispositif d'homme mort en cas de succès. Si le signal cesse d'arriver, vous êtes prévenu — ce qui couvre aussi le cas où le serveur est éteint et où aucune erreur n'est jamais produite.

# last line of the backup script
curl -fsS -m 10 --retry 3 https://hc-ping.com/your-uuid > /dev/null
Vérifiez la TAILLE autant que le code de sortie. Un fichier qui fait soudain le dixième de celui de la semaine passée est un échec qui a annoncé un succès — et c'est la forme de toutes les catastrophes de sauvegarde silencieuses.