# 情况
本人情况:购买了云服务器,用 frp (版本:0.50.0) 搭建了内网穿透,之前一直稳定连接,后来购买了多端口校园网,服务端正常,客户端连接不稳定。
# 解决方法
前期以为是校园网问题,定时重启解决,后来发现跟 frp 有关,具体问题没找到,就考虑结合 crontab
定时启动校验网络状态和内网穿透情况,写了一个脚本,记录一下。
# 新建一个 restart_net.sh
- 先判断当前网络是否畅通,否则要重启自定义的网络服务,之前把连接校园网的服务写入了守护进程 (tianzq-net)。
- 因为博客是用内网穿透搭建的,所以可以通过判断博客是否能正常访问来检验 frp 是否正常,否则重启 frp 服务和博客服务。
#!/bin/bash | |
#检测网络链接畅通 | |
function network() | |
{ | |
#超时时间 | |
local timeout=1 | |
#目标网站 | |
local target=$1 | |
# local target=blog.tzqing.me:7001 | |
#获取响应状态码 | |
local ret_code=`curl -I -s --connect-timeout ${timeout} ${target} -w %{http_code} | tail -n1` | |
if [ "x$ret_code" = "x200" ]; then | |
#网络畅通 | |
return 1 | |
else | |
echo "ret_code is : $ret_code" | |
#网络不畅通 | |
return 0 | |
fi | |
return 0 | |
} | |
echo $(date) | |
network "www.baidu.com" | |
if [ $? -eq 0 ];then | |
echo "网络不畅通,将重启网络服务" | |
sudo service tianzq-net restart | |
# exit -1 | |
else | |
echo "网络正常" | |
fi | |
network "blog.tzqing.me:7001" | |
if [ $? -eq 0 ];then | |
echo "博客访问失败,将重启frp服务和博客服务" | |
sudo service tianzq-frp restart | |
sudo service hexo restart | |
# exit -1 | |
else | |
echo "frp配置正常" | |
fi | |
exit 0 |
# 免密使用 sudo
命令
脚本中使用了 sudo
命令,可以选择在脚本中输入密码,也可以修改配置文件,指定普通用户免密使用 sudo
命令。这里给出修改配置文件流程:
# 切换到超级用户 | |
sudo su | |
vim /etc/sudoers |
更改内容如下:
# 测试脚本
运行脚本是否正常。可尝试关闭对应博客服务,查看脚本是否正常运行。
网络正常,博客访问正常 | 网络正常,博客访问失败 |
---|---|
# 定时启动
用 crontab
一分钟执行一次。输入 crontab -e
进入编辑页面。在最后一行加入你的脚本位置。
# 1 分钟检测一次网络是否异常,异常重启网络服务,将正确和错误日志都输出到 /tmp/load.log | |
*/1 * * * * yourpath/restart_net.sh > /tmp/load.log 2>&1 |