开机自启服务配置重启自动恢复中转
为什么重启后中转服务就停了?
很多新手在折腾中转服务(比如用 frp 做内网穿透、用 socat 做端口转发、或者用 nginx 反代)时,都会遇到一个尴尬情况:服务器一重启,中转服务就停了,每次都要手动 ssh 上去启动,非常麻烦。
究其原因,就是没有把中转服务注册成系统服务并配置开机自启。
本文从零开始,教你用最常用的 systemd 方式配置开机自启,确保重启后中转功能自动恢复。
准备条件
- 一台 Linux 服务器(本文以 CentOS 7 / Ubuntu 20.04 为例,命令通用)
- 已经安装并调试好的中转服务(假设可执行文件路径
/usr/local/bin/your-service,配置文件/etc/your-service.conf) - 拥有 root 权限或 sudo 权限
如果你的中转服务是直接命令行运行的,比如 ./frps -c ./frps.toml,那么下面步骤完全适用。
一步步配置 systemd 服务实现自动启动
# 使用 vim 创建服务单元文件
sudo vim /etc/systemd/system/your-service.service
粘贴以下内容,请根据自己的服务修改 ExecStart 命令和路径:
[Unit]
Description=Your Transit Service (中转服务)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/your-service -c /etc/your-service.conf
Restart=always
RestartSec=5
User=root
Group=root
[Install]
WantedBy=multi-user.target
关键字段说明:
After和Wants:确保网络完全就绪后再启动,避免因网络未连通导致服务启动失败。Restart=always:即使服务异常退出,也会自动重启,进一步提升稳定性。RestartSec:重启前等待 5 秒,避免频繁重启。
保存并退出后执行:
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 开启开机自启
sudo systemctl enable your-service
# 立即启动服务
sudo systemctl start your-service
# 查看状态
sudo systemctl status your-service
如果状态显示 active (running) 且没有红色错误,说明服务已正常运行且已加入开机自启。
新手最容易踩的坑
- 路径写错:ExecStart 必须使用绝对路径,可以用
which 你的服务名称查看完整路径。 - 配置文件权限不足:如果配置文件只允许 root 读取,但服务用普通用户运行,会导致启动失败。建议保持一致。
- 忽略网络依赖:如果你的中转服务需要联网(例如 frp 连接服务器),务必加上
After=network-online.target,否则启动时网络未就绪,服务直接报错退出。 - 忘记 daemon-reload:每次修改 .service 文件后,必须执行
sudo systemctl daemon-reload,否则 systemd 使用的还是旧配置。 - 旧系统无 systemd:如果你的系统是 CentOS 6 或更早,没有 systemd,可以使用 rc.local:在
/etc/rc.local中添加启动命令,并赋予执行权限chmod +x /etc/rc.d/rc.local。
如何确认服务已正常恢复
完成配置后,执行一次完整重启验证:
sudo reboot
等待服务器重启完毕,ssh 登录后直接查看服务状态:
sudo systemctl status your-service
如果显示 active (running),并且 enabled 字样出现在服务描述的末尾,说明开机自启成功。
你也可以用 ps aux | grep your-service 确认进程存在。
更进一步,测试外部连接是否正常(例如 frp 能否成功连接、端口是否可访问)。
如果一切正常,那么你的中转服务已经实现“重启自动恢复”。
高频问题解答
Q:我的服务没有 systemd 单元文件,可以直接把启动命令扔到 /etc/rc.local 吗?
A:可以,但不推荐。rc.local 的启动顺序靠后,且缺少进程守护和依赖管理。优先使用 systemd。只有老旧系统才考虑 rc.local。
Q:服务总是重启失败,怎么排查?
A:用 journalctl -u your-service -n 50 查看最近 50 行日志,定位具体错误。常见原因:配置文件格式错误、端口被占用、缺少权限。
Q:配置了开机自启,但重启后还是没启动?
A:检查 systemctl 的 enable 状态:sudo systemctl is-enabled your-service,输出应为 enabled。如果不是,说明你没成功 enable;如果是 enabled 但仍不启动,检查日志看服务是否在启动时报错退出。
总结
通过上述步骤,你已经学会了用 systemd 为中转服务配置开机自启,彻底告别重启后手动恢复的烦恼。
关键就是两步:写一个正确的 .service 文件,然后 enable 并 start。
遇到问题时优先查看 journal 日志和状态输出,绝大多数错误都能快速定位。
如果你正在处理开机自启服务配置重启自动恢复中转的问题,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。