System/Backup
main sync scripts
On the controller server (always up)
- Put the des3 key in a file called des3.txt, only retrievable trhough rsync (+ssh)
- Edit backup.php:
<?
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
$vals = array(
"time_before_shutdown"=>600,
"mail_to"=>"etienne.adam@gmail.com",
"backup_list"=>"",
);
$laptop = "192.168.1.2";
$lunasys = "lunasys.lunasys.fr";
$tania = "tania.lunasys.fr";
switch( $_POST["host"] ) {
case "server":
$vals["backup_list"] = "$laptop:root:home/yves/Documents/:yves/ $laptop:root:var/lib/mysql/:laptop_mysql/";
$vals["time_before_shutdown"] = "1800";
break;
case "locked-desktop":
$vals["backup_list"] = "$lunasys:locked:data/music/:music/:--delete-after";
$vals["time_before_shutdown"] = "-1";
break;
case "heisei":
//...
break;
}
foreach( $vals as $k=>$v ) {
setcookie($k, $v, time()+36000);
}
echo "OK";
- Finally, Edit sync:
set -x
export BACKUP_MASTER=backup.lunasys.fr
export HOST_ID=$(hostname)
export BASE_PATH="/data"
if [ -f "/tmp/backup.log" ];
then
rm /tmp/backup.log
fi
echo "OK, get my commands ("$HOST_ID")..." >> /tmp/backup.log
wget --save-cookies=/tmp/backup.txt --post-data="host=$HOST_ID" -O /dev/null http://$BACKUP_MASTER/backup.php
VAL_SLEEP=$(grep time_before_shutdown /tmp/backup.txt | awk '{ print $7 }')
VAL_MAIL=$(grep mail_to /tmp/backup.txt | awk '{ gsub(/%40/, "@", $7); print $7 }')
TO_BACKUPS=$(grep backup_list /tmp/backup.txt | awk '{ gsub(/%2F/, "/", $7); gsub(/\+/, " ", $7); gsub(/%3A/, ":", $7); print $7 }')
echo "OK, syncing... ("$TO_BACKUPS")"
echo "OK, syncing... ("$TO_BACKUPS")" >> /tmp/backup.log
for TO_BACKUP in $TO_BACKUPS
do
set -- "$TO_BACKUP"
IFS=":"; declare -a Array=($*)
BACKUP_SERVER="${Array[0]}"
BACKUP_USER="${Array[1]}"
SRC="${Array[2]}"
DEST="${Array[3]}"
OPTIONS="${Array[4]}"
echo "srv:"$BACKUP_SERVER" user:"$BACKUP_USER" src:/"$SRC" dest:"$BASE_PATH/$DEST" opts:"$OPTIONS
if [ "$BACKUP_SERVER" == "fastprod" ]; then
echo "FP special case" >> /tmp/backup.log
rsync -avz -e ssh backup@$BACKUP_MASTER:/data/hosting/backup/backup_fastprod /scripts/
/scripts/backup_fastprod >> /tmp/backup.log 2>&1
elif [ "$BACKUP_SERVER" == "mails" ]; then
echo "Mails backup" >> /tmp/backup.log
rsync -avz -e ssh backup@$BACKUP_MASTER:/data/hosting/backup/backup_mail /scripts/
/scripts/backup_mail >/tmp/backup_mail.log 2>&1
cat /tmp/backup_mail.log >> /tmp/backup.log
else
echo "START SYNC [$BACKUP_SERVER:$SRC]" >> /tmp/backup.log
rsync --dirs -avz $OPTIONS -e ssh "$BACKUP_USER@$BACKUP_SERVER:/$SRC" "$BASE_PATH/$DEST" >> /tmp/backup.log 2>&1
fi
done
df -H >> /tmp/backup.log
echo "Done, send mail..."
SUBJECT="Backup report from "$HOST_ID
cat << EoF | cat - /tmp/backup.log | /usr/lib/sendmail -F "backup server" -t etienne.adam@gmail.com
Subject: $SUBJECT
Backup done
EoF
if [ "$VAL_SLEEP" == "-1" ]; then
echo "Done. Do not shutdown."
else
echo "Done, wait "$VAL_SLEEP" seconds..."
# Wait
sleep $VAL_SLEEP
if [ -f "/tmp/donotshutdown" ]; then
echo "abort shutdown."
else
echo "shutdown NOW !"
sleep 60
shutdown -h now
fi
fi
The backup servers
A backup server wake up once a day, retrieve its commands, execute those, and shut down.
Edit /etc/rc.local and add:
...
sleep 5
i=0
while [ $i -lt 3 ]; do
echo "rsync $i"
rsync -avz -e ssh root@backup.lunasys.fr:/data/hosting/backup/sync /root/sync
if [ $? -eq 0 ]; then
break
fi
sleep 30
i=$(i + 1)
done
/root/sync > /var/log/sync.log 2>&1 &
...