我目前正在使用一个 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
}