I want to setup a cron job to rsync a remote system to a backup partition, something like:
bash -c 'rsync -avz --delete --exclude=proc --exclude=sys root@remote1:/ /mnt/remote1/'
I would like to be able to ‘set it and forget it’ but what if /mnt/remote1 becomes unmounted? (After a reboot or something) I’d like to error out if /mnt/remote1 isn’t mounted, rather than filling up the local filesystem.
Edit:
Here is what I came up with for a script, cleanup improvements appreciated (especially for the empty then … else, I couldn’t leave them empty or bash errors)
#!/bin/bash DATA=data ERROR='0' if cut -d' ' -f2 /proc/mounts | grep -q '^/mnt/$1\$'; then ERROR=0 else if mount /dev/vg/$1 /mnt/$1; then ERROR=0 else ERROR=$? echo 'Can't backup $1, /mnt/$1 could not be mounted: $ERROR' fi fi if [ '$ERROR' = '0' ]; then if cut -d' ' -f2 /proc/mounts | grep -q '^/mnt/$1/$DATA\$'; then ERROR=0 else if mount /dev/vg/$1$DATA /mnt/$1/data; then ERROR=0 else ERROR=$? echo 'Can't backup $1, /mnt/$1/data could not be mounted.' fi fi fi if [ '$ERROR' = '0' ]; then rsync -aqz --delete --numeric-ids --exclude=proc --exclude=sys \ root@$1.domain:/ /mnt/$1/ RETVAL=$? echo 'Backup of $1 completed, return value of rsync: $RETVAL' fi
Get the list of mounted partitions from
/proc/mounts, only match/mnt/remote1(and if it is mounted, send grep’s output to/dev/null), then run yourrsyncjob.Recent
greps have a-qoption that you can use instead of sending the output to/dev/null.