X-Git-Url: http://git.sven.stormbind.net/?p=sven%2Fscripts.git;a=blobdiff_plain;f=hetzner%2Fhetznerbackupv2.sh;h=8361077902433ae91afcddf18bbb2de7a1bfd706;hp=86c7ede180d60f2536095c6f36812585b1d9c9f3;hb=4b666fae8a94056fb2481b9f54fc62a7691182a3;hpb=0d5f2f20d9da1b932020bf17f84ad4cd542cc86a diff --git a/hetzner/hetznerbackupv2.sh b/hetzner/hetznerbackupv2.sh index 86c7ede..8361077 100755 --- a/hetzner/hetznerbackupv2.sh +++ b/hetzner/hetznerbackupv2.sh @@ -1,8 +1,5 @@ #!/bin/bash -### Halt on errors -set -e - ### Do not inherit the following variables # Safety net just in case some calls this # script in a bogus way. @@ -17,33 +14,66 @@ export PASSPHRASE=s export FTP_PASSWORD=s FTP_USER=uxxx FTP_HOST=uxxx.your-backup.de -LOCKFILE="/var/lock/backup/hetznerbackup" PROTO=ssh +GOPTS="--num-retries 15" +ROOTMAIL="root@localhost" +LOCKDIR="/var/lock/backup" +LOCKFILE="$LOCKDIR/hetznerbackup" +LOGFILE="/var/log/hetznerbackup.log" +SESSIONLOG=$(mktemp /var/tmp/hetznerbackup.XXXXXXXXX) +ERRSTAT=0 ## Backup job for main job_main() { - echo "Backing up main" + echo "" >> $SESSIONLOG + echo "Backing up main `date`" >> $SESSIONLOG + echo "" >> $SESSIONLOG + + echo "Going for /etc" >> $SESSIONLOG + duplicity $BMODE $dry $GOPTS /etc $PROTO://$FTP_USER@$FTP_HOST/main/etc >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/etc >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/etc >> $SESSIONLOG 2>&1 || ERRSTAT=1 - echo "Going for /etc" - duplicity $BMODE $dry /etc $PROTO://$FTP_USER@$FTP_HOST/main/etc - duplicity remove-all-but-n-full 5 --force $dry $PROTO://$FTP_USER@$FTP_HOST/main/etc + echo "Going for /home" >> $SESSIONLOG + duplicity $BMODE $dry $GOPTS /home $PROTO://$FTP_USER@$FTP_HOST/main/home >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/home >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/home >> $SESSIONLOG 2>&1 || ERRSTAT=1 - echo "Going for /home" - duplicity $BMODE $dry /home $PROTO://$FTP_USER@$FTP_HOST/main/home - duplicity remove-all-but-n-full 5 --force $dry $PROTO://$FTP_USER@$FTP_HOST/main/home + echo "Going for /var/www" >> $SESSIONLOG + duplicity $BMODE $dry $GOPTS /var/www $PROTO://$FTP_USER@$FTP_HOST/main/var/www >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/var/www >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/var/www >> $SESSIONLOG 2>&1 || ERRSTAT=1 - echo "Going for /var/www" - duplicity $BMODE $dry /var/www $PROTO://$FTP_USER@$FTP_HOST/main/var/www - duplicity remove-all-but-n-full 5 --force $dry $PROTO://$FTP_USER@$FTP_HOST/main/var/www + echo "Going for /var/lib/tomcat6" >> $SESSIONLOG + duplicity $BMODE $dry $GOPTS /var/lib/tomcat6 $PROTO://$FTP_USER@$FTP_HOST/main/tomcat6 >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/tomcat6 >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/tomcat6 >> $SESSIONLOG 2>&1 || ERRSTAT=1 - echo "Going for /var/lib/automysqlbackup" + echo "Going for /var/lib/automysqlbackup" >> $SESSIONLOG if [ -e /var/lib/automysqlbackup/backupdone ]; then - duplicity $BMODE $dry /var/lib/automysqlbackup $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup - duplicity remove-all-but-n-full 5 --force $dry $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup + duplicity $BMODE $dry $GOPTS /var/lib/automysqlbackup $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity remove-all-but-n-full 5 --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup >> $SESSIONLOG 2>&1 || ERRSTAT=1 + duplicity cleanup --extra-clean --force $dry $GOPTS $PROTO://$FTP_USER@$FTP_HOST/main/automysqlbackup >> $SESSIONLOG 2>&1 || ERRSTAT=1 else - echo "WARNING: It seems that the last mysql backup is still runing" - echo "Skipping mysql backup - please re-schedule" + echo "WARNING: It seems that the last mysql backup is still runing" >> $SESSIONLOG + echo "Skipping mysql backup - please re-schedule" >> $SESSIONLOG + ERSSTAT=10 fi + + echo "" >> $SESSIONLOG +} + +# Append the session log to the main logfile and remove log and lock +cleanup() { + ENDDATE=$(date) + if [ $ERRSTAT -eq 0 ]; then + echo "Backup finished successfully $ENDDATE" >> $SESSIONLOG + else + echo "ERROR Backup FAILED $ENDDATE with ERRSTAT $ERRSTAT" >> $SESSIONLOG + cat $SESSIONLOG|mail -s "ERROR Backup FAILED $ENDDATE with ERRSTAT $ERRSTAT" $ROOTMAIL + fi + cat $SESSIONLOG >> $LOGFILE + rm $SESSIONLOG $LOCKFILE } ### check for other runing instances of this script @@ -52,20 +82,23 @@ if [ -e $LOCKFILE ]; then echo "This is a typical result of a failed backup run, please contact your admin" exit 5 else + if [ ! -d $LOCKDIR ]; then + mkdir -m 700 $LOCKDIR + fi touch $LOCKFILE fi ### Set the duplicity backup mode we would like to use if [[ $(LANG=C; date +%A) =~ Sunday ]]; then - echo "Runing in full mode" + echo "Runing in full mode" >> $SESSIONLOG BMODE="full" else - echo "Runing in incr mode" + echo "Runing in incr mode" >> $SESSIONLOG BMODE="incr" fi ### Start the backup jobs job_main - -### remove the lockfile -rm $LOCKFILE +### Cleanup and reporting +cleanup +exit $ERRSTAT