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:
... set -x set +e 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 & ...