frp 服务守护脚本
为了方便开发,我将工控机从公司拿回了家里。在未做任何修改的情况下,原先在公司很稳定的内网穿透,到了家里不定期地就会断开连接——frp 进程未死,但是穿透代理全部关闭。研究了几天也没解决,现在只能推测是家庭宽带不如企业宽带稳定。(家宽故意干扰长连接?限制内网穿透?)
我用守护脚本临时解决这个问题。思路是每分钟检查内网穿透出的 web 服务可用性(http 状态码 为 200),不可用则杀死进程,然后再由 Supervisor 自动拉起服务。另外写入标记文件,避免重复杀进程。脚本如下:
#!/bin/bash
URL="https://dujun.bf"
TIME=`date "+%Y-%m-%d %H:%M:%S"`
FAIL_LOG_FILE="/var/log/frp/failed_$(date '+%Y%m%d').log"
FLAG_FILE="/var/log/frp/flag_$(date '+%Y%m%d%H').log"
response=$(curl -s -k -o /dev/null -w "%{http_code}" "$URL")
if [ "$response" = "200" ]; then
if [ -f $FLAG_FILE ];then
rm -f $FLAG_FILE;
echo "${TIME} ok" >> $FAIL_LOG_FILE
fi
else
if [ ! -f $FLAG_FILE ];then
echo "${TIME} failed, restarting..." >> $FAIL_LOG_FILE
echo $TIME > $FLAG_FILE
ps axu | grep /frp/frpc | awk '{print $2}' | xargs kill -9
else
echo "${TIME} still restarting..." >> $FAIL_LOG_FILE
fi
fi