]> git.sven.stormbind.net Git - sven/scripts.git/blob - hetzner/hetznerbackupv2.sh
On some systems /var/lock/ is on tmpfs or will be cleaned otherwise
[sven/scripts.git] / hetzner / hetznerbackupv2.sh
1 #!/bin/bash
2
3 ### Do not inherit the following variables
4 # Safety net just in case some calls this
5 # script in a bogus way.
6 unset $dry
7
8 ### Debug
9 #set -x 
10 #set dry="--dry-run"
11
12 ### General settings
13 export PASSPHRASE=s
14 export FTP_PASSWORD=s
15 FTP_USER=uxxx
16 FTP_HOST=uxxx.your-backup.de
17 PROTO=ssh
18 ROOTMAIL="root@localhost"
19 LOCKDIR="/var/lock/backup"
20 LOCKFILE="$LOCKDIR/hetznerbackup"
21 LOGFILE="/var/log/hetznerbackup"
22 SESSIONLOG=$(mktemp /var/tmp/hetznerbackup.XXXXXXXXX)
23 ERRSTAT=0
24
25 ## Backup job for main
26 job_main() {
27     echo "Going for /etc" >> $SESSIONLOG
28     duplicity $BMODE $dry /etc $PROTO://$FTP_USER@$FTP_HOST/main/etc >> $SESSIONLOG 2>&1 || ERRSTAT=1
29     duplicity remove-all-but-n-full 5 --force $dry $PROTO://$FTP_USER@$FTP_HOST/main/etc >> $SESSIONLOG 2>&1 || ERRSTAT=1
30
31     echo "Going for /home" >> $SESSIONLOG
32     duplicity $BMODE $dry /home $PROTO://$FTP_USER@$FTP_HOST/main/home >> $SESSIONLOG 2>&1  || ERRSTAT=1
33     duplicity remove-all-but-n-full 5 --force $dry $PROTO://$FTP_USER@$FTP_HOST/main/home >> $SESSIONLOG 2>&1 || ERRSTAT=1 
34
35     echo "Going for /var/www" >> $SESSIONLOG
36     duplicity $BMODE $dry /var/www $PROTO://$FTP_USER@$FTP_HOST/main/var/www >> $SESSIONLOG 2>&1  || ERRSTAT=1
37     duplicity remove-all-but-n-full 5 --force $dry $PROTO://$FTP_USER@$FTP_HOST/main/var/www >> $SESSIONLOG 2>&1  || ERRSTAT=1
38
39     echo "Going for /var/lib/automysqlbackup" >> $SESSIONLOG
40     if [ -e /var/lib/automysqlbackup/backupdone ]; then
41             duplicity $BMODE $dry /var/lib/automysqlbackup $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup >> $SESSIONLOG 2>&1  || ERRSTAT=1
42             duplicity remove-all-but-n-full 5 --force $dry $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup >> $SESSIONLOG 2>&1  || ERRSTAT=1
43     else
44        echo "WARNING: It seems that the last mysql backup is still runing" >> $SESSIONLOG
45        echo "Skipping mysql backup - please re-schedule" >> $SESSIONLOG
46     fi
47
48     echo "" >> $SESSIONLOG
49 }
50
51 ## Append the session log to the main logfile and remove it
52 clean_log() {
53    cat $SESSIONLOG >> $LOGFILE
54    rm $SESSIONLOG
55 }
56
57 ### check for other runing instances of this script
58 if [ -e $LOCKFILE ]; then
59     echo "Lockfile $LOCKFILE found - aborting"
60     echo "This is a typical result of a failed backup run, please contact your admin"
61     exit 5
62 else
63     if [ ! -d $LOCKDIR ]; then
64         mkdir -m 700 $LOCKDIR
65     fi
66     touch $LOCKFILE
67 fi
68
69 ### Starting
70     echo "" >> $SESSIONLOG
71     echo "Starting Backup `date`" >> $SESSIONLOG
72     echo "" >> $SESSIONLOG
73
74 ### Set the duplicity backup mode we would like to use
75 if [[ $(LANG=C; date +%A) =~ Sunday ]]; then
76     echo "Runing in full mode" >> $SESSIONLOG
77     BMODE="full"
78 else
79     echo "Runing in incr mode" >> $SESSIONLOG
80     BMODE="incr"
81 fi
82
83 ### Start the backup jobs
84 job_main
85
86 ### Cleanup and reporting
87 ENDDATE=$(date)
88 if [ $ERRSTAT -eq 0 ]; then
89     echo "Backup finished successfully $ENDDATE" >> $SESSIONLOG
90     clean_log
91     rm $LOCKFILE
92     exit 0
93 else
94     echo "ERROR Backup FAILED $ENDDATE" >> $SESSIONLOG
95     cat $SESSIONLOG|mail -s "ERROR Backup FAILED $ENDDATE" $ROOTMAIL
96     clean_log
97     exit 1
98 fi