Forum Programmation.shell Backup instinct

Posté par  .
Étiquettes : aucune
0
1
nov.
2005
Salut a celui qui me lira

J'ai fait 2 petit script de backup:

1:
#!/bin/sh
DATE=`date +%Y%m%d`;
red="\e[1;31m";
green="\e[1;32m";
yellow="\e[1;33m";
blue="\e[1;34m";
cyan="\e[1;36m";
nc="\e[0m";

echo -e "\t$yellow Démmarage de la sauvegarde système";
for file in /home/jul /etc/fstab /root /etc/mtab /etc/inittab /etc/sudoers /etc/X11/xorg.conf /etc/rc.d/ /etc/swaret.conf /etc/ntp.conf /var/spool/cron/crontabs/ ; do tar -rf save_slack${DATE}.tar $file ; done
#gzip -9 save_slack$.tar

echo -ne "$nc Moving created save package to mnt/fichier/os/save";
mv "save_slack${DATE}.tar" /mnt/fichier/os/save
if [ $? -eq 0 ]; then
echo -e "\t$green Fait, sauvgarder dans /mnt/fichier/os/save $nc";
else
echo -e "\t$red Erreur $nc";
fi

Xdialog --msgbox "Bakup_sys effectuer" --title "backu_sys"

2:
---
#!/bin/sh
red="\e[1;31m";
green="\e[1;32m";
yellow="\e[1;33m";
blue="\e[1;34m";
cyan="\e[1;36m";

echo -e "\t$green Démmarage de la sauvegarde";

cp -rvu /mnt/fichier/audio /mnt/save
cp -rvu /mnt/fichier/bd_images /mnt/save
cp -rvu /mnt/fichier/os /mnt/save
cp -rvu /mnt/fichier/table /mnt/save

Xdialog --msgbox "Mise a jour fichier effectuer" --title "backu_fichier"

Comme vous pouvez le voir rien de bien évoluer.
J'ai modifier le cron :
10 19 * * * /usr/bin/aterm -name backup-systeme -g 67x16+517+72 -bg black -fg white +sb -e /home/jul/backup
00 19 * * * /usr/bin/aterm -name backup-fichier -g 67x16+545+136 -bg black -fg white +sb -e /home/jul/backup2

Le problème c'est qu'il exécute deux fois. Je peut enlever le aterm mais je ne sais si il ya eu des erreur.Sinon Comment je peut faire une sortie vers un log?
Ya t-il un moyen pour que je supprime l'ancien tar du premier script?

Merci d'avance
  • # Envoi vers les logs

    Posté par  (site web personnel) . Évalué à 1.

    Pour l'exécution en double je n'ai pas de solution mais pour ce qui est d'envoyer une sortie vers un log il y a la commande logger qui est prévue pour cela (voir la page de man qui convient pour les différentes options).

    Ah juste des détails :

    Xdialog --msgbox "Mise à jour fichier effectuée" --title "backu_fichier"

    echo -e "\t$green Démarrage de la sauvegarde";
  • # cron

    Posté par  . Évalué à 1.

    C'est une bonne idée d'utiliser cron, mais une mauvaise idée de l'utiliser de façon interactive avec des programmes X (Xdialog, aterm, ...) Ca veut dire que la sauvegarde marche seulement si tu es loggué.

    Ce que j'utilise personellement , c'est juste un script qui se lance et lorsque tout se passe bien, il n'affiche aucune sortie. Lorsque quelque chose se passe mal (plus d'espace libre sur le périphérique de sauvegarde par exemple) il y a un message d'erreur et cron l'envoie par mail. Il suffit donc de surveiller son mail local pour être au courant.
    Dans ton cas, si tu veux toujours une confirmation, il suffit d'écrire ce que tu veux sur la sortie standard.

    Pour l'exécution en double, ne serait-ce pas un problème lié à une mauvaise interaction entre anacron et cron?
    • [^] # Re: cron

      Posté par  . Évalué à 2.

      Es que tu pourrait me montrer ton script je pourrai peut-être m'inspirer de quelque truc.
      Je ne n'utilise pas anacron.
      • [^] # Re: cron

        Posté par  . Évalué à 1.

        Salut, j'ai fait un petit script assez similaire pour ma Slack, et qui marche expérimentalement bien. Bon, par contre je ne l'ai pas automatisé avec cron, pour éviter de remplir mon disque dur...

        En gros, il fait un gros tarball pour chaque répertoire dans le tableau $BACKUP_DATA et les range tous dans un dossier YYYY-MM-DD à l'intérieur de $BACKUP_PATH.

        Si ça peut t'être utile, voilà le code:

        root@Jaguar:~/Admin# cat backup-o-matic
        #! /bin/sh

        BACKUP_PATH="/root/backup"
        BACKUP_DATE=`date --iso-8601=date`

        # The directory/files to compress and save
        BACKUP_NUM=4
        BACKUP_DATA[0]="/etc"
        BACKUP_DATA[1]="/home"
        BACKUP_DATA[2]="/root"
        BACKUP_DATA[3]="/boot"


        if [ ! -d $BACKUP_PATH/$BACKUP_DATE ]; then
            # Create the directory
            mkdir -p $BACKUP_PATH/$BACKUP_DATE

            # Archive the data
            for ((i=0;i<$BACKUP_NUM;i++)); do
                echo "Compressing ${BACKUP_DATA[i]}..."
                 nice -n 10 tar czfP $BACKUP_PATH/$BACKUP_DATE/`echo "backup${BACKUP_DATA[i]}" | sed s/"\/"/"-"/g | cut -f1 -d\ `.tgz --exclude-from ./exclude-list ${BACKUP_DATA[i]}
            done
        fi

        Ce script ne doit marcher qu'avec bash (boucle for spécifique entre autres) et n'est pas élégant (voire carrément brut de décoffrage), mais il fait son boulot. Le fichier exclude-list est une simple liste de fichiers, comme ça:

        root@Jaguar:~/Admin# cat exclude-list
        /home/jaguarwan/.wine/drive_c/*
        /home/jaguarwan/Download/*
        /home/jaguarwan/Playground/*
        /home/jaguarwan/.pearpc/*
        /home/jaguarwan/.aMule/Incoming/*
        /home/jaguarwan/.aMule/Temp/*
        /home/invite/*
        /root/backup/*
      • [^] # Re: cron

        Posté par  . Évalué à 1.

        Voila. C'est loin d'être parfait, mais ça me suffit. C'est prévu pour faire des sauvegarde du répertoire personnel. Il y a une sauvegarde partielle chaque jour de la semaine et une totale une fois par semaine. Ce script marche mal (certains fichiers peuvent ne pas être sauvegardés) si la sauvegarde hebdomadaire n'est pas faite.
        Les sauvegardes de moins d'une semaine sont copiées avec rsync sur une machine distante (il faut configurer ssh pour qu'il ne réclame pas de mot de passe).
        Périodiquement, il faut enlever les anciennes sauvegardes locales complètes à la main. Si j'oublie de le faire, je reçois un mail qui contient un message d'erreur du type "no space left on device". Dans mon cas, les sauvegardes locales sont sur une partition séparées qui est montée uniquement au moment de la sauvegarde.


        #!/bin/bash

        # Ce script DOIT être édité pour refléter votre configuration.
        # Vous devez modifier les variables ci-dessous ainsi que les "exclude" dans la
        # commande tar pour enlever tout ce qui ne mérite pas une sauvegarde (cache de
        # mozilla, ...)

        # Répertoire local où sont stockées les sauvegardes
        dir="/backup"
        # Répertoire distant = remotemachine:remotedir/
        remotemachine="remote"
        remotedir="backup/"
        # Jour de la semaine où une sauvegarde complète est effectuée.
        # 0=dimanche, 1=lundi, ...
        day="0"
        # Répertoire personnel à sauvegarder. Il est obtenu à partir de $HOME.
        # D'autres répertoires peuvent être ajoutés à la fin de la commande tar. La
        # boite au lettre entrante est sauvegardée en utilisant $LOGNAME
        home=`echo $HOME"/" | sed 's#^/##'`

        mount /backup

        if [ `date +%w` = $day ]; then
        archivename=$dir"/old/`date +%Y%m%d`.tgz"
        param=""
        remotename="lastweek.tgz"
        else
        archivename=$dir"/`date +%A`.tgz"
        # lastbackup: sauvegarde la plus récente
        lastbackup=`ls -1 --sort=time -r $dir/*.tgz | tail -1`
        param=" --newer-mtime $lastbackup"
        remotename="`date +%A`.tgz"
        fi
        tar --create --atime-preserve\
        --directory='/'\
        $param\
        --exclude=$home'.mozilla*Cache*'\
        --exclude=$home'.amaya*'\
        --exclude=$home'.w3m*'\
        --exclude=$home'.kde*'\
        --exclude=$home'.enlightenment*'\
        --exclude=$home'.gnome*'\
        --exclude=$home'.gimp*'\
        --exclude=$home'.Abisuite*'\
        $home "var/mail/"$LOGNAME \
        | gzip --rsyncable > $archivename

        if [ `date +%w` = $day ]; then
        ln -sf $archivename $dir"/lastweek.tgz"
        fi

        ping -c 5 -q $remotemachine &> /dev/null && \
        rsync --times --copy-links -e ssh $dir/*.tgz $remotemachine:$remotedir

        umount /backup
        • [^] # Re: cron

          Posté par  . Évalué à 1.

          petit correctif: les versions récentes de tar sont bavardes et affichent la liste des fichiers qui n'ont pas été modifiés et qui ne sont donc pas sauvegardés. Il faut rediriger la sortie erreur de tar pour ne pas recevoir un mail tous les jours, par exemple en modifiant la ligne contenant gzip par:


          2> $dir"/log"| gzip --rsyncable > $archivename

Suivre le flux des commentaires

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