我想设置一个cron作业,以将远程系统重新同步到备份分区,例如:

bash -c 'rsync -avz --delete --exclude=proc --exclude=sys root@remote1:/ /mnt/remote1/'

我希望能够“设置并忘记它”,但是如果/mnt/remote1卸载了该怎么办? (在重新启动或其他操作之后)如果未安装/mnt/remote1,我想报错,而不是填充本地文件系统。

编辑:
这是我为脚本而想出的,清理方面的改进值得赞赏(尤其是对于空的话……否则,我不能将它们留空或bash错误)
#!/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

最佳答案

if cut -d' ' -f2 /proc/mounts | grep '^/mnt/remote1$' >/dev/null; then
    rsync -avz ...
fi

/proc/mounts获取已安装分区的列表,仅匹配/mnt/remote1(如果已安装,则将grep的输出发送到/dev/null),然后运行rsync作业。

最近的grep具有一个-q选项,您可以使用该选项,而不是将输出发送到/dev/null

09-27 20:57