]> git.sven.stormbind.net Git - sven/scripts.git/blob - hetzner/hetznerbackupv2.sh
Add global options in GOPTS to increase the number of retries from 5 to 15 for hetzne...
[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 GOPTS="--num-retries 15"
19 ROOTMAIL="root@localhost"
20 LOCKDIR="/var/lock/backup"
21 LOCKFILE="$LOCKDIR/hetznerbackup"
22 LOGFILE="/var/log/hetznerbackup.log"
23 SESSIONLOG=$(mktemp /var/tmp/hetznerbackup.XXXXXXXXX)
24 ERRSTAT=0
25
26 ## Backup job for main
27 job_main() {
28     echo "" >> $SESSIONLOG
29     echo "Backing up main `date`" >> $SESSIONLOG
30     echo "" >> $SESSIONLOG
31
32     echo "Going for /etc" >> $SESSIONLOG
33     duplicity $BMODE $dry $GOPTS /etc $PROTO://$FTP_USER@$FTP_HOST/main/etc >> $SESSIONLOG 2>&1 || ERRSTAT=1
34     duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/etc >> $SESSIONLOG 2>&1 || ERRSTAT=1
35     duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/etc >> $SESSIONLOG 2>&1 || ERRSTAT=1
36
37     echo "Going for /home" >> $SESSIONLOG
38     duplicity $BMODE $dry $GOPTS /home $PROTO://$FTP_USER@$FTP_HOST/main/home >> $SESSIONLOG 2>&1  || ERRSTAT=1
39     duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/home >> $SESSIONLOG 2>&1 || ERRSTAT=1
40     duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/home >> $SESSIONLOG 2>&1 || ERRSTAT=1
41
42     echo "Going for /var/www" >> $SESSIONLOG
43     duplicity $BMODE $dry $GOPTS /var/www $PROTO://$FTP_USER@$FTP_HOST/main/var/www >> $SESSIONLOG 2>&1  || ERRSTAT=1
44     duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/var/www >> $SESSIONLOG 2>&1  || ERRSTAT=1
45     duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/var/www >> $SESSIONLOG 2>&1 || ERRSTAT=1
46
47     echo "Going for /var/lib/tomcat6" >> $SESSIONLOG
48     duplicity $BMODE $dry $GOPTS /var/lib/tomcat6 $PROTO://$FTP_USER@$FTP_HOST/main/tomcat6 >> $SESSIONLOG 2>&1  || ERRSTAT=1
49     duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/tomcat6 >> $SESSIONLOG 2>&1  || ERRSTAT=1
50     duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/tomcat6 >> $SESSIONLOG 2>&1 || ERRSTAT=1
51
52     echo "Going for /var/lib/automysqlbackup" >> $SESSIONLOG
53     if [ -e /var/lib/automysqlbackup/backupdone ]; then
54             duplicity $BMODE $dry $GOPTS /var/lib/automysqlbackup $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup >> $SESSIONLOG 2>&1  || ERRSTAT=1
55             duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup >> $SESSIONLOG 2>&1  || ERRSTAT=1
56             duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup >> $SESSIONLOG 2>&1 || ERRSTAT=1
57     else
58        echo "WARNING: It seems that the last mysql backup is still runing" >> $SESSIONLOG
59        echo "Skipping mysql backup - please re-schedule" >> $SESSIONLOG
60        ERSSTAT=10
61     fi
62
63     echo "" >> $SESSIONLOG
64 }
65
66 # Append the session log to the main logfile and remove log and lock
67 cleanup() {
68     ENDDATE=$(date)
69     if [ $ERRSTAT -eq 0 ]; then
70         echo "Backup finished successfully $ENDDATE" >> $SESSIONLOG
71     else
72         echo "ERROR Backup FAILED $ENDDATE with ERRSTAT $ERRSTAT" >> $SESSIONLOG
73         cat $SESSIONLOG|mail -s "ERROR Backup FAILED $ENDDATE with ERRSTAT $ERRSTAT" $ROOTMAIL
74     fi
75    cat $SESSIONLOG >> $LOGFILE
76    rm $SESSIONLOG $LOCKFILE
77 }
78
79 ### check for other runing instances of this script
80 if [ -e $LOCKFILE ]; then
81     echo "Lockfile $LOCKFILE found - aborting"
82     echo "This is a typical result of a failed backup run, please contact your admin"
83     exit 5
84 else
85     if [ ! -d $LOCKDIR ]; then
86        mkdir -m 700 $LOCKDIR
87     fi
88     touch $LOCKFILE
89 fi
90
91 ### Set the duplicity backup mode we would like to use
92 if [[ $(LANG=C; date +%A) =~ Sunday ]]; then
93     echo "Runing in full mode" >> $SESSIONLOG
94     BMODE="full"
95 else
96     echo "Runing in incr mode" >> $SESSIONLOG
97     BMODE="incr"
98 fi
99
100 ### Start the backup jobs
101 job_main
102 ### Cleanup and reporting
103 cleanup
104 exit $ERRSTAT