一、起因:在Debian系统中安装了ddns-go来实现ipv6动态域名解析,但是由于宿舍电源并不是24h供电,导致有时随身WiFi开机了但是并没有网络,在网络再次恢复后,ddns-go无法正常运行,如下图所示
二、解决方法:建立一个脚本文件,实时检测网络状态,在检测到网络中断后若网络恢复,则进行ddns-go容器的重启脚本:
1.建立脚本文件
vi /root/check.sh
2.建立日志文件
vi /root/checknet.log
3.check.sh中写入以下代码
#!/bin/bash
flag=0 #设置网络中断标志位
#检测网络链接畅通
function network()
{
#超时时间
local timeout=1
#目标网站
local target=www.baidu.com
#获取响应状态码
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1`
if [ "x$ret_code" = "x200" ]; then
#网络畅通
flag=0
else
#网络不畅
flag=1
fi
return 0
}
ntpdate cn.pool.ntp.org #同步时间,需要安装相应服务(apt install ntpdate)
sleep 5
for i in {0..69}
do
network
if [ $flag -eq 1 ]
then
sleep 1
network
if [ $flag -eq 0 ];then #若网络恢复则进行容器重启,并记录日志
echo `date +%Y/%m/%d/%H:%M:%S` >> /root/checknet.log
docker restart ddns-go
exit -1
fi
fi
sleep 1
done
exit 0
三、定时:我这里使用的docker来安装ddnsgo,所以重启命令为docker restart ddns-go,由于我安装了OMV,所以直接在webui中的控制台来新建定时任务,也可以使用以下命令来进行定时
crontab -e
在文件最后一行加入以下命令
*/1 * * * * root bash /root/check.sh
附:定时清理日志内容
若担心日志内容积累过多占用空间(美观),也可以使用脚本定时清理
vi /root/clean.sh
内容:
#!/bin/bash
cat /dev/null > /root/cheknet.log
定时方法和前文一致