杜郎俊赏 - dujun.io

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

日期:2024-04-11