3.5 KiB
3.5 KiB
MineSentinel 部署指南
MineSentinel 是一个 Minecraft 服务器守护进程,每 10 秒检测服务器端口状态,发现崩溃时自动重启。
环境要求
- 操作系统: Linux (systemd)
- Ruby: >= 3.0(用到了
Timeout.timeout和Process.spawn) - 权限: root(需要执行
systemctl管理 Minecraft 服务) - Minecraft 服务: 已注册为 systemd 服务,服务名为
minecraft
文件结构
/opt/minesentinel/ # 推荐部署目录
├── main.rb # 主程序入口
├── method_executor.rb # 日志系统 + 重启逻辑
├── server_status_detector.rb # TCP 端口检测
└── uni_log_path.rb # 日志路径工具(可选)
部署步骤
1. 创建目录并复制文件
mkdir -p /opt/minesentinel
cp main.rb method_executor.rb server_status_detector.rb /opt/minesentinel/
如果要用 uni_log_path.rb 也一并复制。
2. 确认 Minecraft systemd 服务存在
systemctl status minecraft
如果你的 Minecraft 服务名不是 minecraft,需要修改 method_executor.rb 中所有 systemctl xxx minecraft 为你的实际服务名。
3. 手动测试
先前台跑一次确认无报错:
cd /opt/minesentinel
ruby main.rb
观察日志输出,确认能正常检测端口、识别服务状态。按 Ctrl+C 退出。
调试模式(输出更详细):
LOG_LEVEL=debug ruby main.rb
4. 注册为 systemd 服务
创建 /etc/systemd/system/minesentinel.service:
[Unit]
Description=MineSentinel - Minecraft Server Auto-Restart Daemon
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/minesentinel
ExecStart=/usr/bin/ruby /opt/minesentinel/main.rb
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
Environment=LOG_LEVEL=info
[Install]
WantedBy=multi-user.target
然后:
systemctl daemon-reload
systemctl enable minesentinel
systemctl start minesentinel
5. 查看日志
# 实时日志
journalctl -u minesentinel -f
# 最近 50 条
journalctl -u minesentinel -n 50
# 只看错误
journalctl -u minesentinel -p err
日志级别说明
通过 Environment=LOG_LEVEL=xxx 控制:
| 级别 | 说明 |
|---|---|
debug |
全部输出,含每次巡检结果、TCP 响应时间 |
info |
启动/重启/恢复等关键操作 |
warn |
服务器异常、超时、强制终止 |
error |
重启失败、重试次数耗尽 |
默认 info,生产环境推荐 info;排查问题时临时改为 debug。
工作流程
每 10 秒循环:
├─ TCP 连接 127.0.0.1:25565
├─ 端口开放 → debug 日志,继续等待
├─ 端口关闭 → 记录 warn,触发重启
│ └─ systemctl restart minecraft(最多重试 10 次)
│ ├─ 30 秒内完成 → 成功,计数器归零
│ └─ 超时 → kill -9 → systemctl kill → systemctl start
└─ 10 次全部失败 → 进入空闲等待,直到手动恢复
常见问题
Q: 报 Errno::EPERM?
A: 需要 root 权限执行。确认 systemd service 以 root 运行,或 sudo ruby main.rb。
Q: 如何修改检测端口?
A: 编辑 server_status_detector.rb 第 52 行,修改 test_port 的端口参数。
Q: 如何修改检测间隔?
A: 编辑 main.rb 第 33 行,修改 sleep 10 的值。
Q: 如何修改重启超时时间?
A: 编辑 method_executor.rb 第 9 行,修改 PERSISTENCE_PERIOD。