Uiuiui, am 31.3. war Worldbackupday, da bin ich doch schon wieder 2 Tage zu spät mit meinem script… aber immerhin, endlich bin ich mal soweit.
Was machts? naja, im Prinzip ists nur ein wrapper um einen rsync Einzeiler. Er schaut nach, ob der letzte Backup länger als 604800 (7 Tage) zurückliegt, ob der Rechner im ethernet ist und der server gepingt werden kann. Wenn das alles zutrifft, wird rsync gestartet und ab gehts. Ein wenig notifications und mail, wenns nicht klappt. Fertig ist die Laube.
Klar, das script muss per crontab nach Geschmack wiederholt werden. Ich mach das alle 10 minuten, aber das ist Geschmacksache. Hier nun das Script. Macht draus, was ihr wollt 🙂
Achja: der Trick, dass das überhaupt aus dem cron geht, ist, ein ssh-key ohne passwort zu verwenden und den auf der anderen Seite zu den authorized keys zu tun, aber das wisst ihr ja sicher.
#!/bin/bash
cd /home/foobar
SERVER=192.168.1.2
SCRIPTNAME=`basename $0`
last=0
if [ -f .laptopbackup ]
then
last=`cat .laptopbackup`
fi
curr=`date '+%s'`
diff=$(($curr-$last))
echo diff: $diff
if [ $diff -gt 604800 ]; then
IP=$(/sbin/ip route | awk '/default/ { print $3 }')
IF=$(/sbin/ip route | awk '/default/ { print $5 }')
if [ $IP="192.168.1.1" ] && [ $IF="eth0" ]; then
ping -q -c 1 $SERVER
if [ $? -eq 0 ]
then
/usr/bin/notify-send $SCRIPTNAME "Starting backup to $SERVER" --icon=dialog-information
/usr/bin/rsync -e '/usr/bin/ssh -i /home/foobar/.ssh/foobar_home' -av --delete --exclude-from=stevebackup.exclude . foobar@192.168.1.2:laptopbackup/ > .laptopbackup.log
if [ $? -eq 0 ]
then
/usr/bin/notify-send $SCRIPTNAME "Backup to $SERVER finished" --icon=dialog-information
echo "$curr" &> .laptopbackup
else
/usr/bin/notify-send $SCRIPTNAME "Backup to $SERVER failed" --icon=dialog-information
mail -s "laptopbackup: Error" skrodzki@stevekist.de < .laptopbackup.log
fi
else
/usr/bin/notify-send $SCRIPTNAME "Server $SERVER not reachable" --icon=dialog-information
fi
fi
fi