创建frp_control.sh 文件,将文件放在frp目录内
#!/bin/bash
# 获取当前目录的绝对路径
CURRENT_DIR=$(pwd)
# 定义FRP配置文件路径(位于当前目录)
FRP_CONFIG_PATH="$CURRENT_DIR/frpc.toml"
# 定义FRP进程ID文件路径(位于当前目录)
PID_FILE="$CURRENT_DIR/frp.pid"
# 定义启动FRP的函数
start_frp() {
# 检查PID文件是否存在
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "FRP进程已经在运行,进程ID为:$PID"
return 1
else
echo "PID文件存在,但对应的FRP进程未运行。将删除旧PID文件并重新启动FRP。"
rm -f "$PID_FILE"
fi
fi
# 启动FRP客户端或服务端,并将输出重定向到日志文件
nohup ./frpc -c "$FRP_CONFIG_PATH" > frpc.log 2>&1 &
# 获取并保存新的进程ID
PID=$!
echo $PID > "$PID_FILE"
echo "FRP已启动,进程ID为:$PID"
return 0
}
# 定义停止FRP的函数
stop_frp() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
kill "$PID"
rm -f "$PID_FILE"
echo "FRP进程已停止。"
else
echo "进程ID文件存在,但对应的FRP进程未运行。"
fi
else
echo "没有找到进程ID文件,无法停止FRP。"
fi
}
# 脚本参数处理
case "$1" in
start)
start_frp
;;
stop)
stop_frp
;;
restart)
stop_frp
sleep 2
start_frp
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
启动/停止
./frp_control.sh stop
./frp_control.sh start