配置开机自启服务重启自动恢复中转服务

中转服务(如 frp、nps 或 socat)在服务器重启后若没有配置开机自启,会导致内网穿透、端口映射等功能中断,需要手动恢复。
本文以 frp 客户端为例,教你用 systemd 创建服务单元,让中转服务在服务器崩溃或重启后自动启动并保持稳定运行。

适用场景与准备条件

  • 适用场景:你使用 frp、nps、socat 等软件将内网服务暴露到公网,希望服务器每次重启后无需人工干预,自动恢复转发。
  • 准备条件
  • 一台 Linux 服务器(CentOS 7+ / Ubuntu 16+,已用 systemd 管理服务)
  • 中转服务二进制文件已下载到 /usr/local/bin/(如 frpc)
  • 配置文件已准备(如 /etc/frp/frpc.toml
  • 拥有 root 权限(或使用 sudo)

第一步:编写 systemd 服务单元

systemd 是大多数现代 Linux 发行版的初始系统(PID 1),它负责管理系统服务的启动和监控。
通过编写一个 .service 文件,可以定义中转程序的运行方式、重启策略和开机启动时机。

  1. 创建一个 frpc.service 文件(如果使用其他中转程序,替换对应名称):
sudo tee /etc/systemd/system/frpc.service <

参数说明

  • After=network-online.target:确保网络完全就绪后再启动 frpc(避免刚启动时网络未通导致连接失败)。
  • Restart=on-failure:仅当进程异常退出时自动重启,正常停止(如 systemctl stop)不会触发自动重启。
  • RestartSec=5s:每次重启前等待 5 秒,防止频繁重启。
  • User=nobody:以低权限用户运行,降低安全风险(可根据需要改为其他用户)。
  • LimitNOFILE=1048576:提高文件描述符限制,避免高并发连接时资源不足。
  1. 配置文件权限:
sudo chmod 644 /etc/systemd/system/frpc.service

第二步:启用并启动服务

  1. 重新加载 systemd 配置,使新单元生效:
sudo systemctl daemon-reload
  1. 设置开机自启:
sudo systemctl enable frpc.service
  1. 立即启动服务:
sudo systemctl start frpc.service
  1. 检查服务状态:
sudo systemctl status frpc.service

输出应该显示 Active: active (running),且 Enabled: enabled 表示已设置开机自启。

第三步:验证重启后自动恢复

  1. 手动重启服务器:
sudo reboot
  1. 等待服务器重新上线,登录后检查 frpc 是否已自动运行:
sudo systemctl is-active frpc.service   # 应返回 active
sudo systemctl is-enabled frpc.service   # 应返回 enabled
  1. 也可以通过查看日志确认启动状态:
sudo journalctl -u frpc.service -n 20 --no-pager

避坑指南(常见错误及解决方法)

  • 服务启动后立即退出:常见原因是配置文件路径错误或权限不足。检查 ExecStart 里的二进制路径和配置路径是否正确,使用 -c 参数指定配置文件;同时确认二进制有执行权限(chmod +x /usr/local/bin/frpc)。
  • 网络未就绪导致连接失败:如果 frp 服务端要求严格时序,可将 After=network-online.target 改为 After=network.target 或添加 Requires=network-online.target,但通常 AfterWants 已足够。
  • 多次重启后服务被 systemd 抑制:如果进程在短时间内反复崩溃,systemd 会限制重启频率。可以调整 StartLimitIntervalSec=60StartLimitBurst=5 参数,或直接使用 Restart=always(不建议,除非明确知道进程属于“守护式”工作模式)。
  • 用户权限问题:如果中转服务需要读写某些系统文件(如日志、socket 文件),使用 User=nobody 可能导致没有写入权限。建议为服务创建专用用户 frp,并赋予对应目录的权限。

常见问题解答(FAQ)

Q1:除了 frp,其他中转工具(如 nps、socat)也能用同样的方法实现开机自启吗?

可以。
只需将 ExecStart 中的命令改为对应工具的启动命令,调整配置路径即可。
例如 nps 客户端:ExecStart=/usr/local/bin/npc -server=xxx -vkey=xxx

Q2:我不想用 systemd,还有其他简单的方法吗?

可以使用 /etc/rc.local(需要确保该脚本有执行权限且 rc-local.service 已启用),
在其中添加启动命令,
但 systemd 是更现代、
更推荐的方式,
支持自动重启和日志管理。

Q3:如何让服务在掉线后自动重连而不是重启动?

部分中转工具(如 frp 的 auto_connect 配置)内部有重连机制;
结合 systemd 的 Restart=on-failure 可以在进程退出的情况下兜底。
如果你的中转工具以守护进程方式运行(如 nohup),建议改用 systemd 统一管理。

Q4:服务日志在哪里看?

systemd 管理的服务日志统一由 journald 管理,执行 journalctl -u 服务名 查看。
也可以修改配置文件中的日志输出到文件(通过 ExecStart 中的重定向 >> /var/log/frpc.log 2>&1),但建议优先使用 journalctl

分享到:
上一篇
压缩脚本批量处理大模型与网站备份文件
下一篇
永久设置环境变量存放本地模型路径:用户级与系统级全攻略
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意