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