Forum Linux.debian/ubuntu Premier script bash pour backups, je tente un peu plus ambitieux

Posté par  . Licence CC By‑SA.
Étiquettes :
2
22
juil.
2025

Salut à tous,
Je me suis mis à bash il y a pas très longtemps et ce weeke end j’ai bricolé un petit script pour faire mes sauvegardes automatiquement sur un disque externe. L’idée c’est de ne plus avoir à y penser et de pouvoir dormir tranquille en cas de pépin. C’est encore simple mais j’ai essayé de faire les choses proprement, je vérifie que le disque est bien monté, je log un peu ce qu’il se passe, et j’utilise rsync pour garder les permissions et tout ça. Voilà ce que ca donne :

#!/bin/bash
# Répertoires source et destination
SRC="/home/user/Documents"
DEST="/mnt/backup/Documents"

# Fichier de log
LOG="/var/log/backup.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")

# Vérification que le disque est monté
if mountpoint -q /mnt/backup; then
    echo "[$DATE] Début du backup" >> "$LOG"

    rsync -av --delete "$SRC" "$DEST" >> "$LOG" 2>&1

    if [ $? -eq 0 ]; then
        echo "[$DATE] Backup terminé avec succès" >> "$LOG"
    else
        echo "[$DATE] Erreur pendant le backup" >> "$LOG"
    fi
else
    echo "[$DATE] Disque de backup non monté" >> "$LOG"
fi

Ca tourne bien en cron, j’ai mis ca tous les deux jours pour l’instant. Je suis sur que c’est perfectible donc si vous avez des remarques, conseils ou mauvaises pratiques à corriger, je suis curieux de vous écouter.
Merci

  • # Mes remarques

    Posté par  (site web personnel) . Évalué à 7 (+4/-0).

    • je vérifierai le script avec shellcheck https://www.shellcheck.net/ (existe en paquet dans les distributions)
    • suivant les contextes, certains préfèrent #!/usr/bin/env bash en shebang
    • j'aurais ajouté un set -eu -o pipefail au début pour s'éviter des problèmes plus tard
    • j'ai toujours du mal avec SRC d'un côté et DEST en 4 lettres de l'autre. Pourquoi pas DST dans ce cas, c'est cohérent en termes de pas de voyelles et c'est plus joli pour l'indentation
    • je préfère les printf à echo dès que les variables arrivent
    • j'aime bien expliciter les arguments dans les scripts, surtout sur des commandes que je n'utilise pas forcément tous les jours d'une part, et aussi pour les autres qui liraient le script (donc au lieu de -a je mettrais --archive par exemple). Les versions courtes c'est sympa quand on les écrit, mais moins quand on les lit (genre curl -sSLf).
    • la possibilité d'écrire dans le fichier de log n'est pas testée et on laisse rsync échouer s'il y a des soucis de permissions par exemple (pas forcément un souci)
    • on oscille entre français et anglais dans le code et les commentaires (bon en vrai j'aurais juste mis sauvegarde au lieu de backup)
    • la terminologie n'est pas cohérente entre "début" et "terminé" (donc commencé ou fin ?)
    • j'aurais mis des exit 0/1/2 dans les différents cas pour donner une information via le code de retour.
    • [^] # Re: Mes remarques

      Posté par  . Évalué à 3 (+2/-0). Dernière modification le 22 juillet 2025 à 16:09.

      Bonjour

      Il faudrait aussi actualiser la valeur de la variable DATE après la fin de la sauvegarde, sinon, la date de tous les messages envoyés dans backup.log sera toujours la même : celle du lancement du script.

  • # Date ISO miam

    Posté par  (site web personnel, Mastodon) . Évalué à 2 (+1/-0).

    Une syntaxe courte et efficace que j'applique dès que je peux sur date :

    $ date -Is
    2025-07-22T16:51:05+02:00
    

    Ce qui signifie "format ISO-8601 avec une précision à la seconde".
    En bonus : pas d'espaces, donc plus pratique.

  • # backup ?

    Posté par  . Évalué à 3 (+1/-0).

    Même si chacun est libre d'avoir la définition qu'il veut de ce qu'est un backup, force est de reconnaître que

    rsync -av --delete

    ne correspond pas vraiment à la définition la plus courante.

    • [^] # Re: backup ?

      Posté par  . Évalué à 2 (+0/-0).

      Cela dépend surtout du reste du script. On peut parfaitement faire une sauvegarde incrémentale avec rsync (un nouveau dossier horodaté a à chaque fois et des liens en dur).

      • [^] # Re: backup ?

        Posté par  . Évalué à 3 (+1/-0). Dernière modification le 22 juillet 2025 à 19:33.

        Tout à fait, voir par exemple Timeshift., un excellent outil de backup basé sur rsync.

        Mais ma remarque était par rapport au script "de backup" présenté, qui plus est avec l'option --delete qui est la marque d'une synchronisation, pas d'un backup (au sens habituel du terme).

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.