summaryrefslogtreecommitdiff
path: root/content/resources/backup.sh
blob: aaf16f420ad06b0649012b3f117cc1598ba2d83d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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