X-Git-Url: https://git.sven.stormbind.net/?p=sven%2Fscripts.git;a=blobdiff_plain;f=stormbind%2Fhetznerbackupv2.sh;fp=stormbind%2Fhetznerbackupv2.sh;h=8361077902433ae91afcddf18bbb2de7a1bfd706;hp=0000000000000000000000000000000000000000;hb=2cf03307fed0f8e3bb9adde634361751be051bc7;hpb=e7572966b7566278c295b282f5d75a59713b80e8 diff --git a/stormbind/hetznerbackupv2.sh b/stormbind/hetznerbackupv2.sh new file mode 100755 index 0000000..8361077 --- /dev/null +++ b/stormbind/hetznerbackupv2.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +### Do not inherit the following variables +# Safety net just in case some calls this +# script in a bogus way. +unset $dry + +### Debug +#set -x +#set dry="--dry-run" + +### General settings +export PASSPHRASE=s +export FTP_PASSWORD=s +FTP_USER=uxxx +FTP_HOST=uxxx.your-backup.de +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 "" >> $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 /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 /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/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" >> $SESSIONLOG + if [ -e /var/lib/automysqlbackup/backupdone ]; then + 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" >> $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 +if [ -e $LOCKFILE ]; then + echo "Lockfile $LOCKFILE found - aborting" + 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" >> $SESSIONLOG + BMODE="full" +else + echo "Runing in incr mode" >> $SESSIONLOG + BMODE="incr" +fi + +### Start the backup jobs +job_main +### Cleanup and reporting +cleanup +exit $ERRSTAT