在使用 FRP(Fast Reverse Proxy)进行内网穿透时,很多新手都会遇到一个痛点:直接在终端输入 ./frpc -c ./frpc.toml 启动后,终端窗口就被“霸占”了。一旦关闭 SSH 连接或关掉终端,FRP 服务也就跟着断开了。
为了让 FRP 能够稳定、持久地为我们服务,我们需要让它在后台运行,并且配置开机自启。本文将为你介绍两种最常用的方法:简单粗暴的 Shell 脚本法,以及现代 Linux 系统最推荐的 Systemd 服务法。
环境说明: > 本文假设你的 FRP 核心文件(
frps,frpc)和配置文件(frps.toml,frpc.toml)都存放在/etc/frp/目录下。如果你的路径不同,请在代码中自行替换。
方法一:简单直接的 Shell 脚本法(适合快速测试)
如果你不想接触太复杂的系统配置,可以使用 Linux 自带的 nohup 命令配合 Shell 脚本。nohup 的作用是不挂断地运行命令,即使你退出了终端账户,程序依然能在后台坚挺。
1. 编写服务端 (frps) 启动脚本
在 /etc/frp/ 目录下创建一个名为 start_frps.sh 的文件,填入以下内容:
#!/bin/bash
# 进入 frp 所在目录
cd /etc/frp
# 赋予 frps 执行权限(防止因权限不足报错)
if [ ! -x "./frps" ]; then
chmod +x ./frps
fi
# 使用 nohup 在后台启动 frps,并将日志重定向到 frps.log
nohup ./frps -c ./frps.toml > frps.log 2>&1 &
echo "✅ FRP 服务端 (frps) 已在后台启动,日志请查看 /etc/frp/frps.log"
2. 编写客户端 (frpc) 启动脚本
同理,创建 start_frpc.sh 文件:
#!/bin/bash
cd /etc/frp
if [ ! -x "./frpc" ]; then
chmod +x ./frpc
fi
nohup ./frpc -c ./frpc.toml > frpc.log 2>&1 &
echo "✅ FRP 客户端 (frpc) 已在后台启动,日志请查看 /etc/frp/frpc.log"
3. 如何使用?
给这两个脚本赋予执行权限,然后直接运行即可:
# 赋予执行权限
chmod +x /etc/frp/start_frps.sh
chmod +x /etc/frp/start_frpc.sh
# 启动服务端
./start_frps.sh
# 启动客户端
./start_frpc.sh
方法二:优雅且专业的 Systemd 法(🔥 强烈推荐!)
虽然脚本法很简单,但在生产环境中,我们强烈推荐使用 Systemd。
为什么?因为 Systemd 拥有进程守护功能——如果你不小心杀死了 FRP 进程,或者程序意外崩溃,Systemd 会自动帮你重启它!而且它是目前主流 Linux 发行版管理开机自启的标准做法。
1. 配置服务端 (frps) 开机自启
使用 vim 或 nano 创建服务配置文件:
sudo vim /etc/systemd/system/frps.service
将以下内容粘贴进去:
[Unit]
Description=FRP Server Service
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=simple
# 核心:进程崩溃后自动重启,间隔5秒
Restart=on-failure
RestartSec=5s
# 指向你的程序和配置文件绝对路径
ExecStart=/etc/frp/frps -c /etc/frp/frps.toml
[Install]
WantedBy=multi-user.target
2. 配置客户端 (frpc) 开机自启
如果你是在内网机器上配置客户端,创建对应的客户端服务文件:
sudo vim /etc/systemd/system/frpc.service
粘贴以下内容:
[Unit]
Description=FRP Client Service
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/etc/frp/frpc -c /etc/frp/frpc.toml
[Install]
WantedBy=multi-user.target
3. 启动并启用服务(关键步骤)
配置文件写好后,需要让 Systemd 重新加载配置,并启动服务。在终端执行以下命令:
# 1. 重新加载 Systemd 配置
sudo systemctl daemon-reload
# ==============================
# 如果你配置的是服务端 (frps):
# ==============================
sudo systemctl enable frps # 设置开机自启
sudo systemctl start frps # 立即启动服务
sudo systemctl status frps # 查看运行状态是否为 active (running)
# ==============================
# 如果你配置的是客户端 (frpc):
# ==============================
sudo systemctl enable frpc # 设置开机自启
sudo systemctl start frpc # 立即启动服务
sudo systemctl status frpc # 查看运行状态是否为 active (running)
💡 避坑指南(Pro Tips)
- 认清自己的角色:一台机器通常只需要运行
frps(公网拥有独立 IP 的服务器)或者frpc(家里的 NAS、内网电脑)。不要在同一台机器上把两个服务都开启了。 - 权限问题:无论使用哪种方法,确保
/etc/frp/frps和/etc/frp/frpc二进制文件具有可执行权限(chmod +x)。 - 防火墙放行:服务端启动后,别忘了在云服务器的安全组或宝塔面板/UFW防火墙中,放行 FRP 使用到的端口(如 7000 以及你需要穿透的业务端口)。
希望这篇文章能帮你彻底解决 FRP 后台运行和开机自启的问题,畅享丝滑的内网穿透体验!
版权属于:soarli
本文链接:https://blog.soarli.top/archives/902.html
转载时须注明出处及本声明。