仅当连接到特定网络时才使用 Rsync 备份

仅当连接到特定网络时才使用 Rsync 备份

我目前正在使用一个 cron 作业,该作业每天晚上运行备份脚本,使用 rsync 通过 ssh 将我的文档备份到联网的机器上。我的备份脚本的内容如下:

#! /bin/bash
rsync -vaz --progress -s -e "ssh" /store/Documents user@server:/home/user/Backup

和我的crontab:

0 20 * * * /home/user/backup.sh > /home/user/backup.log

显然,这只有在我连接到家庭网络并且联网的计算机可用时才有效。我想编辑我的脚本或 cron 作业,使其仅在连接到家庭网络时运行。我该怎么做呢?

运行 Ubuntu Mate 16.04.2。

任何帮助都非常感谢。

答案1

我使用如下简单函数来测试我的 NAS 是否可以访问:

function whereamI {

# Can we reach the NAS from our LAN?

/bin/ping -c1 $1 &> /dev/null

if [ ! $? == 0 ]; then
        return 1
fi

# double-check

/usr/bin/nslookup $1 | grep -i $2 &> /dev/null
if [ ! $? == 0 ]; then
        return 1
fi

return 0

}

进而:

whereamI TheIPOfMyNAS  TheNameOfMyNAS
if [ ! $? == 0 ]; then
      exit 1
fi

答案2

要识别您的网络,您可以识别网关的 MAC 地址:

此 Bash 代码:

function gatewayMAC {
    gatewayIP=$(route -n | grep -e '^0\.0\.0\.0' | tr -s ' ' | cut -d ' ' -f 2)

    if [[ ! -z "$gatewayIP" ]]
    then
        # Identify the gateway by its MAC (uniqueness...)
        gatewayData=($(arp -n $gatewayIP | grep -e $gatewayIP | tr -s ' '))
        if [[ "${gatewayData[1]}" == "(incomplete)" ]]
        then
            echo ""
        elif [[ "${gatewayData[2]}" == "--" ]]
        then 
            echo ""
        else
            echo "${gatewayData[2]}"
        fi
    fi
}

相关内容