笔者曾是白群3年多的忠实用户,不过最近实在受不了白裙的渣渣性能,果断入坑了一台白威,不得不说,性能吊打白裙,Docker跑起来舒服多了。笔者的网站实际就是搭建在这台Nas上的,并且使用了Cloudflare做了内网穿透,不过最近发现Cloudflared经常性的无法连接到边缘服务器,导致网站处于掉线状态(网站实际是正常的,只是穿透失联了),用户也就无法正常打开网页了。Cloudflare网络在国内不是非常稳定,这个相信接触过的朋友多少有些了解,如果发现Cloudflared连不上边缘服务器,一般重启下就会恢复,但是笔者不可能天天盯着它,所以就引出了本文的话题——用定时任务来解决。
不过,也许是笔者对威联通的系统不熟悉,也行就是没有,反正在WebUI中没找到关于定时任务的功能,而群辉的WebUI中是可以直接在操作界面上添加定时任务的。既然WebUI上没找到,干脆就直接到系统的Corn中增加吧。
写脚本
笔者对编写shell脚本不熟悉,但是对需求很明确,所以这个脚本实际上是ChatGPT帮我写的,脚本如下:
check_and_resatrt.sh
#!/bin/bashcurrent_time=$(date +"%Y-%m-%d %H:%M:%S")# checkingcurl --fail https://www.huluohu.com >/dev/null 2>&1if [ $? -ne 0 ]; then echo "${current_time}: Cloudflared is not online. Restarting..." # restart cloudflared docker restart cloudflared if [ $? -ne 0 ]; then echo "${current_time}: Failed to restart Cloudflared." exit 1 fi echo "${current_time}: Cloudflared restarted successfully."else echo "${current_time}: Cloudflared is online."fi
脚本很简单,就是用curl检查网站是否正常响应,如果正常就打印个日志,如果异常则重启cloudflared容器。
附上使用ChatGPT写脚本的原始对话:
踩坑
威联通的QuTS系统是基于Linux定制的,所以也是可以直接在Crontab中增加定时任务的。
首先, 执行以下命令:
crontab -e
然后, 将下面的定时任务增加在最下面,保存并退出
*/5 * * * * /share/documents/scripts/sh/check_and_resatrt.sh >> /share/documents/logs/cfd.log 2>&1
表示每隔5分钟执行1次脚本,并将日志输出到cfd.log文件中
但是,QuTS有个坑,就是使用crontab -e添加的定时任务会自动消失,即使系统没用重启也会消失!
正确方法
经过一番查找,在QuTS中,用户自定义的定时任务要写到/etc/config/crontab才能持久化。下面是正确的做法:
首先,使用vim编辑/etc/config/crontab
vim /etc/config/crontab
然后,同样将下面的定时任务增加在最下面,保存并退出
*/5 * * * * /share/documents/scripts/sh/check_and_resatrt.sh >> /share/documents/logs/cfd.log 2>&1
最后,重启crontab,需要执行2条命令
sudo crontab /etc/config/crontabsudo /etc/init.d/crond.sh restart
等待重启完成,定时任务就添加完成了,看下执行效果: