时间:2025年6月1日晚
主机:中柏
系统:ubuntu23.10
遇到bug:开机后服务并未启动
bug是否消失:是
bug是否彻底解决:是
bug严重等级:红色
2025-06-01 22:26
在服务器上配置穿透隧道并手动启动:

运行正常,但我发现关闭终端会中断隧道连接,肥肠麻烦,于是决定使用systemd配置开机自启
2025-06-01 22:30
首先创建systemd服务文件 /etc/systemd/system/mefrpc.service :
sudo nano /etc/systemd/system/mefrp.service文件内容为:
(注意:mefrpc -t字段不要重复,工作路径"WorkingDirectory"、执行文件路径"ExecStart"和用户名"User"换成你自己的。总之就是改中文字段/还有去掉双引号)
[Unit]
Description=mefrpc client
After=network.target
[Service]
Type=simple
ExecStart=/home/你的用户名/mefrpc -t "你的启动参数"
WorkingDirectory=/home/你的用户名/
Restart=on-failure
User=你的用户名
[Install]
WantedBy=multi-user.target按Ctrl+o保存,回车,Ctrl+x退出
然后使用命令完成服务注册并启动:
sudo systemctl daemon-reload
sudo systemctl enable mefrp.service
sudo systemctl start mefrp.service使用命令验证服务是否运行:
systemctl status mefrp.service***
如果出现类似信息:
[root@your-server ~]# sudo systemctl daemon-reload
[root@your-server ~]# sudo systemctl enable mefrp.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mefrp.service to /etc/systemd/system/mefrp.service.
[root@your-server ~]# sudo systemctl start mefrp.service
[root@your-server ~]# sudo systemctl status mefrp.service -l
● mefrp.service - mefrpc client
Loaded: loaded (/etc/systemd/system/mefrp.service; enabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since 日 2025-09-21 00:53:51 +08; 15ms ago
Process: 27497 ExecStart=/home/USERNAME/mefrpc -t YOUR_TOKEN -p PORT (code=exited, status=203/EXEC)
Main PID: 27497 (code=exited, status=203/EXEC)
9月 21 00:53:51 your-server systemd[1]: mefrp.service: main process exited, code=exited, status=203/EXEC
9月 21 00:53:51 your-server systemd[1]: Unit mefrp.service entered failed state.
9月 21 00:53:51 your-server systemd[1]: mefrp.service failed.记得给mefrpc赋权:
chmod +x /home/你的用户名/mefrpc2025-06-01 22:43
我又创建了一个穿透隧道,决定命名为 mefrpbox:
和之前一样,先创建systemd服务文件 /etc/systemd/system/mefrpbox.service :
sudo nano /etc/systemd/system/mefrpbox.service启动参数改成你在网站生成的启动配置:
(注意:mefrpc -t字段不要重复,工作路径"WorkingDirectory"、执行文件路径"ExecStart"和用户名"User"换成你自己的。总之就是改中文字段)
[Unit]
Description=mefrpc client
After=network.target
[Service]
Type=simple
ExecStart=/home/你的用户名/mefrpc -t "你的启动参数"
WorkingDirectory=/home/你的用户名/
Restart=on-failure
User=你的用户名
[Install]
WantedBy=multi-user.target按Ctrl+o保存,回车,Ctrl+x退出
注册并启用:
sudo systemctl daemon-reload
sudo systemctl enable mefrpbox.service
sudo systemctl start mefrpbox.service两项服务均运行正常:

2025-06-01 23:00
重启电脑,测试服务开机自启是否生效。
结果发现两个服务都没有运行,排查发现mefrpc和mefrpbox都没有成功连上穿透服务器,但手动启动后仍可正常运行,检查文件无误后,我判断是系统启动时网络尚未就绪,客户端提前执行,导致连接失败
2025-06-01 23:10
修改两个systemd服务文件,在[Unit]段添加:
Wants=network-online.target
After=network-online.target修改后分别重启服务:
sudo systemctl daemon-reload
sudo systemctl restart mefrpc.service
sudo systemctl restart mefrpbox.service2025-06-01 23:20
再次重启系统后验证,两个服务均在网络就绪后自动启动,systemctl status显示为active(running),并成功建立MEFrp隧道
问题完美解决。
总结
问题根源在于systemd启动服务时网络尚未完全连接,mefrpc无法建立隧道,导致服务中断。通过在服务配置中添加network-online.target的依赖,确保网络连接后再启动服务,问题完美解决
2025-06-01 23:33
处于长期维护的考虑,我决定将最初的mefrp.service更改为mefrp-"容器名称",后续再创建服务也更加方便管理。
您也可以参照我的办法管理,记得把替换为你的自用命名
首先停止旧服务:
sudo systemctl stop mefrpc.service重命名service文件:
sudo mv /etc/systemd/system/mefrpc.service /etc/systemd/system/mefrp-"容器名称".service启动你新命名的服务:
sudo systemctl enable mefrp-"容器名称".service
sudo systemctl start mefrp-"容器名称".service确认服务状态是否正常:
systemctl status mefrp-"容器名称".service附加项:重启服务器验证
这样一来,以后就能通过 mefrp-"容器名称" 来区分用途,不容易混淆了
评论