#!/bin/sh ########################################################### # This script uses rsync to backup directories on a media # (ex: USB disk) with a copy and incremental method. ########################################################### # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ############################################################ # # Written by Spip # Adapted by Chimrod # added script path detection # delete with find # Version 1.0 # ############################################################ #to be nice... ionice -c3 -p$$ renice +15 -p $$ THEDATE=`date +%F_%Hh%M` #FILE=`dirname $0` FILE=`dirname "$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"` LOGFILE=$FILE'/log/sauvegarde' SPLIT='=====================================================================' #check logfile directory if ! [ -e $LOGFILE ] then /bin/mkdir -p $LOGFILE fi #check if the media is mounted if ! [ -e $FILE ] then echo "$THEDATE : péripherique non connecté. Pas de sauvegarde possible" >> "$LOGFILE/save.log" echo $SPLIT >> "$LOGFILE/save.log" exit 0 fi #prevent a second task LOCKFILE="/var/lock/sauvegarde.lock" [ -f $LOCKFILE ] && exit 0 #if the script are stoped, remove lockfile trap "rm -f $LOCKFILE" EXIT touch $LOCKFILE echo "$THEDATE : Début de sauvegarde" >> "$LOGFILE/save.log" # $1:time to keep files; $2: name of the backup; $3: target function save() { echo "$SPLIT" >> "$LOGFILE/$2.log" echo "$THEDATE" >> "$LOGFILE/$2.log" #Incremental & copie INC="$FILE/$2/INC/$THEDATE" BAK="$FILE/$2/BAK" TOSAVE="$3" mkdir -p $INC if ! [ -e "$BAK" ] then /bin/mkdir -p "$BAK" fi #a: archivage :recurcif, preserve dates, persmissions, groupes... #v: verbose mode #delete : supprime les fichiers n'etant plus chez l'émeteur >> copie conforme. /usr/bin/rsync -a --stats --delete --backup --backup-dir="$INC" "$TOSAVE" "$BAK" >> "$LOGFILE/$2.log" cd $FILE/$2/INC tar -czvf "$INC.tar.gz" "$THEDATE" echo tar -czvf "$INC.tar.gz" "$FILE/$2/INC/$THEDATE" rm -rf "$THEDATE" #Remove the file older than $1 days find "$FILE/$2/INC" -mtime +$1 -delete >> "$LOGFILE/save.log" } #List here all repositories to backup save 90 etc /etc/ #to log the end of the backup THEDATE=`date +%F_%Hh%M` echo "$THEDATE : Sauvegarde effectuée" >> "$LOGFILE/save.log" exit 0