我有一个个人Ubuntu主机,连接到公共/共享 Wi-Fi AP(不受我控制)。
有时,会出现网络问题,我很确定,仅重新启动网络服务是行不通的。唯一的办法就是重启它。
我的计划是添加一个 crontab,来测试网络连接。如果失败,请重新启动计算机。
如果我手动运行 auto_reboot.sh,当ping测试失败时,它会重新启动。但是从 crontab 运行,它不起作用:)
这是我的 crontab 条目
crontab -l
* * * * * /root/loadrc/transmissionrc/auto_reboot.sh
Run Code Online (Sandbox Code Playgroud)
#!/bin/zsh
/root/loadrc/networkrc/ping.sh
rc=$?
if [[ $rc -eq 0 ]]
then
echo "say The internet is back up."
else
reboot
fi
Run Code Online (Sandbox Code Playgroud)
#!/bin/zsh
((count = 10)) # Maximum number to try.
while [[ $count -ne 0 ]] ; do
ping -c 1 8.8.8.8 # Try once.
rc=$?
if [[ $rc -eq 0 ]] ; then
((count = 1)) # If okay, flag loop exit.
else
sleep 1 # Minimise network storm.
fi
((count = count - 1)) # So we don't go forever.
done
exit $rc
Run Code Online (Sandbox Code Playgroud)
我添加了一些日志,并故意关闭 Wi-Fi 接口:
watch ifconfig wlan0 down
Run Code Online (Sandbox Code Playgroud)
transmissionrc/auto_reboot.sh
#!/bin/zsh
echo "" > /root/loadrc/crontab.log
/root/loadrc/networkrc/ping.sh
rc=$?
if [[ $rc -eq 0 ]]
then
echo "say The internet is back up."
else
reboot
fi
Run Code Online (Sandbox Code Playgroud)
networkrc/ping.sh
#!/bin/zsh
((count = 10)) # Maximum number to try.
while [[ $count -ne 0 ]] ; do
/usr/bin/ping -c 1 8.8.8.8 >> /root/loadrc/crontab.log 2>&1
echo "step --> 2" >> /root/loadrc/crontab.log
rc=$?
if [[ $rc -eq 0 ]] ; then
echo "step --> 3" >> /root/loadrc/crontab.log
((count = 1)) # If okay, flag loop exit.
else
echo "step --> 4" >> /root/loadrc/crontab.log
sleep 1 # Minimise network storm.
fi
((count = count - 1)) # So we don't go forever.
done
exit $rc
Run Code Online (Sandbox Code Playgroud)
/usr/bin/ping: connect: Network is unreachable
step --> 2
step --> 3
Run Code Online (Sandbox Code Playgroud)
这意味着,在 crontab 模式下,即使 ping 测试失败,返回码仍然为零。
那么问题来了:如何在crontab模式下测试网络连接呢?
/usr/bin/ping -c 1 8.8.8.8 >> /root/loadrc/crontab.log 2>&1
echo "step --> 2" >> /root/loadrc/crontab.log
rc=$?
Run Code Online (Sandbox Code Playgroud)
我认为这会检查命令的退出代码echo,而您的逻辑需要命令的退出代码ping。
| 归档时间: |
|
| 查看次数: |
2733 次 |
| 最近记录: |