# 情况

本人情况:购买了云服务器,用 frp (版本:0.50.0) 搭建了内网穿透,之前一直稳定连接,后来购买了多端口校园网,服务端正常,客户端连接不稳定。

# 解决方法

前期以为是校园网问题,定时重启解决,后来发现跟 frp 有关,具体问题没找到,就考虑结合 crontab 定时启动校验网络状态和内网穿透情况,写了一个脚本,记录一下。

# 新建一个 restart_net.sh
  1. 先判断当前网络是否畅通,否则要重启自定义的网络服务,之前把连接校园网的服务写入了守护进程 (tianzq-net)。
  2. 因为博客是用内网穿透搭建的,所以可以通过判断博客是否能正常访问来检验 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

更改内容如下:

image-20240403111911747

# 测试脚本

运行脚本是否正常。可尝试关闭对应博客服务,查看脚本是否正常运行。

网络正常,博客访问正常 网络正常,博客访问失败
image-20240403112222273 image-20240403112238872
# 定时启动

crontab 一分钟执行一次。输入 crontab -e 进入编辑页面。在最后一行加入你的脚本位置。

# 1 分钟检测一次网络是否异常,异常重启网络服务,将正确和错误日志都输出到 /tmp/load.log
*/1 * * * * yourpath/restart_net.sh > /tmp/load.log 2>&1