Minecraft 服务器智能守护进程
TCP 检测 · 自动重启 · 防循环冷却
当前版本 加载中... · 频道 dev
每 1.5 秒对 127.0.0.1:25565 发起 TCP 连接,毫秒级感知服务器状态变化。
严格区分端口超时与端口关闭——超时仅记录日志(避免网络抖动误判),关闭才触发重启。
重启后等待 200 秒,初次启动有 300 秒宽限期,彻底防止 MC 启动缓慢导致循环重启。Watchdog 同步适配(210s)。
连续 10 次重启失败后进入空闲等待模式,每 10 秒检测端口,恢复后自动退出。
核心逻辑纯 Ruby 实现,支持 systemd / Docker / screen / Windows,轻松适配任意进程管理器。
四级日志(debug / info / warn / error),输出到 systemd journal,排查问题一目了然。
通过 journalctl -u minesentinel -f 实时查看,以下为一次完整崩溃恢复过程的日志输出:
💡 日志中 PID、精确时间戳等敏感信息已脱敏。实际输出格式与 journald 一致,支持 --since、-f 等标准过滤参数。
| 项目 | 说明 |
|---|---|
| 操作系统 | Linux(需 systemd),也支持 Windows |
| Ruby | >= 3.0 |
| 权限 | root(systemctl 需要) |
| MC 服务 | 已注册为 systemd 服务,默认名 minecraft |
方式一:Git 克隆(推荐,仅拉取必要文件,排除仓库冗余)
git clone --depth 1 --single-branch \ https://gitee.com/SCU_team/mine-sentinel.git \ /opt/minecraft/sentinel # --depth 1 仅拉取最新提交,不下载历史记录 # --single-branch 仅拉取 dev 分支
方式二:手动复制
mkdir -p /opt/minecraft/sentinel/src cp src/main.rb src/method_executor.rb src/server_status_detector.rb \ src/systemd_notifier.rb src/config.rb src/updates.rb \ /opt/minecraft/sentinel/src/
cd /opt/minecraft/sentinel/src ruby main.rb # 调试模式: LOG_LEVEL=debug ruby main.rb
项目源码中已提供 minesentinel.service,直接复制:
cp src/minesentinel.service /etc/systemd/system/
单元文件内容:
[Unit] Description=MineSentinel Minecraft Server Monitor After=network.target Before=minecraft.service Wants=minecraft.service [Service] Type=simple WorkingDirectory=/opt/minecraft/sentinel/src ExecStart=/usr/bin/ruby /opt/minecraft/sentinel/src/main.rb Restart=always RestartSec=10 StandardOutput=journal StandardError=journal #Environment=LOG_LEVEL=debug WatchdogSec=210 [Install] WantedBy=multi-user.target
MineSentinel 通过 Before=minecraft.service 确保先于 MC 启动,消除守护盲区。首次启动有 300 秒宽限期等待端口就绪:
systemctl daemon-reload systemctl enable minesentinel # 同时触发 minecraft(Wants=) systemctl start minesentinel
journalctl -u minesentinel -f # 实时 journalctl -u minesentinel -u minecraft -f # 双服务合并
| 参数 | 文件 | 行 | 默认 |
|---|---|---|---|
| 初始宽限期 | config.rb | 1 | 300 s |
| 冷却期 | config.rb | 3 | 200 s |
| 尝试次数 | config.rb | 2 | 3 次 |
| 检测间隔 | config.rb | 4 | 1.5 s |
| systemctl 超时 | method_executor.rb | 17 | 30 s |
| 最大重试 | method_executor.rb | 23 | 10 次 |
| 检测端口 | server_status_detector.rb | 60 | 25565 |
spawn "docker restart mc-server"system "screen -S mc -X quit"; system "screen -dmS mc java ..."spawn "cmd /c start /B java ...",日志输出到文件test_port 的 IP 和端口即可详细适配指南见 DEPLOY.md