diff options
Diffstat (limited to 'content/resources/backup.sh')
-rw-r--r-- | content/resources/backup.sh | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/content/resources/backup.sh b/content/resources/backup.sh new file mode 100644 index 0000000..aaf16f4 --- /dev/null +++ b/content/resources/backup.sh @@ -0,0 +1,100 @@ +#!/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 |