Automated backup using rtcwake and crontab on Ubuntu
This article describes using rtcwake and crontab to wake up a backup computer on a daily basis, perform the backup from a remote server using rsync, then suspend ready for the next time around. The rtcwake process is also re-initiated if the backup computer is woken from suspend in the interim
Firstly, the backup computer must be able to access the server as root using a key:
ssh-keygen -f "/root/.ssh/known_hosts" -R "xxx.xxx.xxx.xxx"
ssh-copy-id username@xxx.xxx.xxx.xxx
and a cron job is needed to start the backup once the computer wakes up, in this cases at 20:32, daily
run crontab -e as root
# m h dom mon dow command
32 20 * * * /backup/backupscript
and the backup script should look something like:
#!/bin/sh
log_file=/backup/logs/backup.log
echo "Running Server Backup: $(date)" >> $log_file echo " " >> $log_file
echo "Backup of directory_name" >> $log_file
rsync -avh -e ssh username@xxx.xxx.xxx.xxx:"/directory_name/" /backup/ 2>&1 >> $log_file
echo "\nEnding Backup: $(date)" >> $log_file
echo " " >> $log_file
/usr/sbin/rtcwake -m mem -l -t $(date +%s -d 'tomorrow 20:30') 2>&1 >> $log_file
The final line causes the computer to suspend with a wake up time of 20:30
rtcwake also needs to be setup on suspend should the computer be used in the interim:
As root, create/edit the file........
/lib/systemd/system-sleep/suspend-script
adding the following
#!/bin/bash
if [ "${1}" == "pre" ]; then
/usr/sbin/rtcwake -m no -l -t $(date +%s -d 'tomorrow 20:30')
fi
Maybe set the computer to suspend automatically after 10-30mins depending on how long the backup is likely to take.