#! /bin/sh ### BEGIN INIT INFO # Provides: rsync-backup # Required-Start: # Required-Stop: $local_fs $network $named $remote_fs $syslog $time # Should-Stop: # Default-Start: # Default-Stop: 0 # Short-Description: Sauvegarde du système. ### END INIT INFO envoyer_mail () { echo "$1" | mail -s "[error] [`hostname`] [$NAME]" $USER return 0 } do_stop () { # initialiser les variables local nom_hote=`hostname` # vérifier que le point de montage est monté # si le point de montage est un dossier et qu'il est monté alors continuer sinon retourner 1 [ -d $point_montage ] && ( /bin/mountpoint -q $point_montage || return 1 ) # tester si l'on peut écrire dans le dossier du point de montage # retourner 2 en cas d'échec [ ! -w $point_montage ] && return 2; # si le dossier up-to-date n'existe pas alors créer le dossier up-to-date [ ! -d $point_montage/$nom_hote/up-to-date ] && mkdir -p $point_montage/$nom_hote/up-to-date # si le dossier increment n'existe pas alors créer le dossier increment [ ! -d $point_montage/$nom_hote/increment ] && mkdir -p $point_montage/$nom_hote/increment # exécuter la commande rsync de sauvegarde /usr/bin/rsync --human-readable \ --recursive --links --perms --times --delete-after \ --log-file=/var/log/rsync-backup.log \ --backup --backup-dir=$point_montage/$nom_hote/increment/`date +%y%m%d`/ \ --exclude-from=$rsync_backup_include --exclude='**' \ / $point_montage/$nom_hote/up-to-date/ || return 3 # supprimer les anciennes sauvegarde find $point_montage/$nom_hote/increment/ -mindepth 1 -maxdepth 1 -type d -ctime +$nb_jours -exec rm -rf {} \; return 0 } PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Description of the service" NAME=rsync-backup SCRIPTNAME=/etc/init.d/$NAME rsync_backup_conf='/etc/rsync-backup.conf' rsync_backup_include='/etc/rsync-backup-include' point_montage='' nb_jours=30 # lire la librairie init-functions . /lib/lsb/init-functions # lire le fichier rsync-backup.conf s'il est lisible # exit 1 en cas d'échec if [ -r $rsync_backup_conf ] ; then . $rsync_backup_conf else log_failure_msg $NAME": " "le fichier $rsync_backup_conf n'est pas lisible" envoyer_mail "le fichier $rsync_backup_conf n'est pas lisible" exit 1 fi # tester si le fichier rsync-backup-include est lisible # exit 1 en cas d'échec if [ ! -r $rsync_backup_include ] ; then log_failure_msg $NAME": " "le fichier $rsync_backup_include n'est pas lisible" envoyer_mail "le fichier $rsync_backup_include n'est pas lisible" exit 1 fi case "$1" in stop) log_daemon_msg $NAME "sauvegarde de la machine..." # exécuter la méthode do_stop do_stop # en fonction du résultat afficher le message de fin case "$?" in 0) log_end_msg 0 exit 0 ;; 1) log_end_msg 1 envoyer_mail "impossible de monter le point de montage $point_montage" exit 1 ;; 2) log_end_msg 1 envoyer_mail "ne peut pas écrire dans dossier du point de montage $point_montage" exit 1 ;; 3) log_end_msg 1 envoyer_mail "échec de la commande rsync" exit 1 ;; esac ;; *) echo "Usage: $0 stop" >&2 exit 3 ;; esac