使用NSSM把 FRP 安装为系统服务


简介

frp 是一个可用于内网穿透的高性能的反向代理开源应用,支持 TCP、UDP 协议,为 HTTP 和 HTTPS 应用协议提供了额外的能力,并且尝试性支持了点对点穿透。

使用NSSM把 FRP 安装为系统服务

frp 使用 Go 语言开发,得益于此,我们使用非常简单,只需要添加执行权限就可以运行了。如果需要将它运行在后台,作为服务的运行的话,就需要我们对系统有一定的了解了,下面我简单介绍一下如何将 frp 安装为系统服务。

注意:在安装服务之前,请确保你的 frp 已经参照 官方文档 进行了正确的配置。


windows

若要将 frp 安装为 windows 的服务,我们需要借助第三方的开源工具 NSSM 来实现,以下是操作步骤:

  1. NSSM 官网 下载对应的工具,并解压到 D 盘根目录。
  2. 以管理员方式运行 cmd,直接输入 d 按回车切换到 d 盘。
  3. 在 cmd 中运行命令 .\nssm install,此时会弹出 GUI 界面。
  4. 在 GUI 中选择你的 frp 路径,并在 Arguments 中正确填入 -c 完整配置文件路径,如图所示:

使用NSSM把 FRP 安装为系统服务

  1. 点击 install service 后,cmd 会提示:Service "frpc" installed successfully! 表示安装完成。

以上就是将 frpc 安装为 windows 服务的操作步骤了,如果是 frps 也是同样的操作,就不再赘述了。


Linux

相比 Windows,Linux 其实更简单,只需要将启动脚本放到相应的目录并加上执行权限就可以了。以下以 frpc 为例。

init.d

建议使用 systemd 来管理。

操作步骤:

  1. frpc 文件写入到 /etc/init.d/frpc,并添加执行权限:chmod +x /etc/init.d/frpc
  2. 添加开机启动:
    • CentOS: chkconfig frpc on
    • Debian: update-rc.d frpc defaults
  3. 启动:service frpc start
  4. 停止:service frpc stop
  5. 重启:service frpc restart
  6. 查看状态:service frpc status

```bash

File: /etc/init.d/frpc

!/bin/sh

frps: FRP-Client Daemon

description: FRP-Client Daemon

请按实际情况修改

PID_FILE=/run/frpc.pid
CONFIG_FILE=/etc/frpc.ini
FRPC_File=/usr/local/frp/frpc

start() {
if [ ! -f $PID_FILE ]; then
echo -n $”Starting FRP client…”
nohup $FRPC_File -c $CONFIG_FILE </dev/null >/dev/null 2>/dev/null &
echo $! > $PID_FILE
echo “”
else
PID=$(cat $PID_FILE)
if [ ! -f /proc/$PID/cmdline ]; then
echo -n $”Starting FRP client…”
nohup $FRPC_File -c $CONFIG_FILE </dev/null >/dev/null 2>/dev/null &
echo $! > $PID_FILE
echo “”
else
echo “FRP client is already running…”
fi
fi
}

stop() {
if [[ -f $PID_FILE ]]; then
echo -n $”Shutting down FRP client…”
kill -9 $(cat $PID_FILE)
rm -f $PID_FILE
echo “”
else
echo “FRP client is not running…”
fi
}

status() {
if [ -f $PID_FILE ]; then
PID=$(cat $PID_FILE)
if [ -f /proc/$PID/cmdline ]; then
echo “FRP client is running…”
else
echo “FRP client is not running…”
rm -f $PID_FILE
fi
else
echo “FRP client is not running…”
fi
}

[ -f $FRPC_File ] || exit 1

case “$1” in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
sleep 3
start
;;
*)
echo $”Usage: $0 {start|stop|status|restart}”
exit 1
esac

exit 0