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