--- /dev/null
+#!/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