问题的出现:

上一篇文章通过使用服务来使frp在后台保持运行,但是由于服务运行早于网络初始化完成,故而并不能真正实现后台运行(甚至都不能实现运行),为了实现真正的后台运行以及保证服务关闭后自动重启服务,就进行了如下探索


思路

定时检查要保活的服务是否在运行,没有运行的话就重新运行它

步骤

  1. 首先写一个保持程序后台运行的shell
    frpc_keeper.sh
#!/bin/sh
pid1=$(systemctl status frpc)
pid2=$(echo $pid1 | grep "Active")
pid=$(echo $pid2 | grep "running")

sendMessage(){
    #这里提供一个自用的发邮件接口,请不要滥用
    # http://wol.sharepeople.cn/api/forwardEmail.php?email=youeremail@xx.com&message=12456&title=电脑开机
    curl -d "email=974830507@qq.com&message=本地主机已恢复Frp服务&title=Frp服务恢复通知" "http://wol.sharepeople.cn/api/forwardEmail.php" > /dev/null
}
restartFrpcService(){
    systemctl start  frpc
}
if [ "$pid" == "" ]
then
    echo "restart"
    restartFrpcService &
    sendMessage &
else
    echo "no need"
fi
exit 0
  • 说明,Linux下的任务调度分为两类:系统任务调度和用户任务调度,这里用系统调度了
  1. 编辑系统任务调度文件
sudo vim /etc/crontab

然后添加一个任务

  • 在文件尾部添加
*/2 * * * * root sh /home/sh/frpc_keeper.sh

结束

每两分钟检查一次服务是否正在运行,服务停止运行后会自动重启并给你预设的邮箱发邮件。