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