DNF私服五国自动化运维图文教程:安全重启+开机自启+终端看板(8H8G实战)

〇、为什么要做这一套(真实踩坑现场)

上一篇攻略修复了”跑不出五国”(根因:服务端进程没跑)。但修复后紧接着又踩了三个坑,本篇一套脚本全部解决:

✗ 坑1:重复执行 ./run五国在线时又跑了 ./run,先后累计留下 8 个 df_game_r 实例(siroco12×3、siroco52×2、siroco56×3)互相抢端口,结果一个都没上线,游戏端口全部空白。
✗ 坑2:重启服务器五国就没了开机只有网关 BaoYu 自己起来,服务端不会自动跑,每次重启都要手动 ./run + 干等 15 分钟。

✗ 坑3:加载进度是黑盒日志停在 Loading 十几分钟不动,分不清”在算大项”还是”卡死了”,手贱一重启全部重来。
✓ 本篇方案① 安全重启脚本(防打架)② systemd 开机自启(防重复+等数据库)③ 终端彩色看板(进度条+红绿状态,登录即见)。

一、第一步:安全重启脚本(防多实例打架)

核心思想:重跑五国之前必须先彻底清场。用一键端自带的 stop 清掉全部进程清单 + 清理日志 pid + FLUSH TABLES,再干净启动:

$ cat /root/dof-restart.sh
#!/bin/bash
# DOF 五国安全重启:先彻底清场再启动(避免多实例打架)
cd /root && ./stop >/dev/null 2>&1
sleep 3
killall -9 Memory 2>/dev/null
sleep 2
echo “已清场,正在启动五国…”
/root/dof-autostart.sh force
echo “启动命令已执行,加载约13-15分钟”
为什么 stop 之后还要 killall Memory?一键端自带的 stop 脚本清单里没有内存优化进程 Memory,实测清场后残留 2 个 Memory 进程。清场后要确认:ps -ef | grep df_game_r | grep -v grep 应该一条都没有。
铁律:五国在线时绝对不要直接再跑 ./run!run 脚本不会杀旧进程,重复跑就是多实例打架。重跑永远用 /root/dof-restart.sh。

二、第二步:开机自动跑五国(systemd 服务)

1

写自启脚本 dof-autostart.sh(三道保险)

#!/bin/bash
# DOF 五国开机自启(防重复启动 + 等待 MySQL 就绪)
LOG=/var/log/dof-autostart.log
log() { echo “[$(date ‘+%F %T’)] $1” >> “$LOG”; }

# 保险1:防重复——已有频道进程在跑就直接退出
if [ “$1” != “force” ] && pgrep -f “df_game_r.*start” >/dev/null 2>&1; then
log “检测到 df_game_r 已在运行,跳过启动(防重复保护)”
exit 0
fi

# 保险2:等 MySQL 就绪(开机时数据库启动需要时间,最多等300秒)
ready=0
for i in $(seq 1 60); do
if (echo > /dev/tcp/127.0.0.1/3306) 2>/dev/null; then ready=1; break; fi
sleep 5
done
[ $ready -eq 0 ] && { log “等待 MySQL 超时,放弃启动”; exit 1; }

# 启动全套服务端
cd /root
nohup ./run > /var/log/dof-run.log 2>&1 &
log “./run 已执行,五国开始加载”

2

写 systemd 单元(KillMode=none 是关键)

$ cat /etc/systemd/system/dof-run.service
[Unit]
Description=DOF Server Auto Run (wu guo df_game_r x3)
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
KillMode=none ← 关键!
ExecStart=/root/dof-autostart.sh
TimeoutStartSec=600

[Install]
WantedBy=multi-user.target

为什么必须 KillMode=none?Type=oneshot 的服务脚本退出后,systemd 默认会清理整个 cgroup——把 run 拉起的十几个后台进程全部连坐杀掉!设为 none 后,systemd 只负责”拉起”,不管进程死活,五国才能存活。实测:systemctl stop dof-run 后三个 df_game_r 进程毫发无损。

3

启用 + 双路径验证

$ chmod +x /root/dof-autostart.sh
$ systemctl daemon-reload && systemctl enable dof-run
Created symlink …/multi-user.target.wants/dof-run.service

# 验证防重复:五国在线时手动触发服务
$ systemctl start dof-run && cat /var/log/dof-autostart.log
[2026-09-17 18:01:31] 检测到 df_game_r 已在运行,跳过启动(防重复保护)
# 三个 df_game_r 进程 PID 纹丝不动 ✓

验证结论:服务 active/enabled;在线时触发会走”跳过”分支(幂等);stop 单元不杀进程(KillMode=none 生效);MySQL 探测通过。开机后自动流程:等数据库 → 跑 run → 13~15 分钟后端口自动上线。

三、第三步:终端彩色状态看板 dof-status

安装到 /usr/local/bin/dof-status(任意目录可敲),并在 /root/.bashrc 里加三行实现登录自动显示:

$ cat >> /root/.bashrc
# DOF 五国状态看板(登录自动显示,仅交互式终端)
if [[ $- == *i* ]] && [ -x /usr/local/bin/dof-status ]; then
/usr/local/bin/dof-status
fi

真实效果(SSH 登录即见):

==================================================
DOF 五国状态面板
==================================================

时间 2026-09-17 18:16:38 已运行 0天5小时8分
系统 ● MySQL在线 ● 网关8188在线 内存 5.6G/7.6G 负载 27.14
● 开机自启已启用 (dof-run)

● siroco12 1区2频道 ████████████████████ 100% ✔ 已上线 :10012
● siroco52 5区2频道 ████████████████████ 100% ✔ 已上线 :10052
● siroco56 5区6频道 ████████████████████ 100% ✔ 已上线 :10056

总状态 ● 五国全部在线,可以进游戏了

加载中时长这样(黄色进度条,一眼看懂还差多远):

● siroco12 1区2频道 ████████████████████ 100% ✔ 已上线 :10012
● siroco52 5区2频道 ███████████░░░░░░░░░░ 55% 加载中…
● siroco56 5区6频道 ███████████░░░░░░░░░░ 55% 加载中…

总状态 █████████░░░░░░░░░░░░ 70% (在线:1 加载中:2 未启动:0)
提示 PVF加载约13~15分钟,日志在动就是正常,勿重启

进度条怎么算出来的(读启动日志的真实里程碑):

日志里程碑 进度 对应阶段
进程出现,日志尚未建立 3% 刚刚 fork 出来
Init Log 10% 日志系统就绪
All DB Open Success 20% 14 个数据库全部连通
Loading Items 35% PVF 中型数据项加载
Loading Advance Altar 55% 进入大项 CPU 计算(最久的一段)
GeoIP Allow 85% 大项计算完成
Connect To Guild/Monitor 93% 服务互联
端口 10012/10052/10056 监听 100% 上线!绿色 ✔
颜色规则:绿 = 在线/正常;黄 = 加载中(进度 ≥55% 转黄,提示进入耗时的大项计算段);红 = 离线/未启动。总状态行会直接给出行动指令:未启动时提示执行 /root/dof-restart.sh。

四、日常运维速查

场景 命令
看五国状态/进度(登录自动显示) dof-status
安全重启五国(自动清场防打架) /root/dof-restart.sh
看自启服务状态 systemctl status dof-run
看自启动作日志 tail /var/log/dof-autostart.log
看加载详情(盯进度) tail -f /home/neople/game/log/siroco12/Log*.init
确认进程(应正好3行) ps -ef | grep df_game_r | grep -v grep
确认端口(应3个监听) ss -tlnp | grep -E '10012|10052|10056'
安全组提醒(承接上篇):对外放行 10012/10052/10056 + 11012/11052/11056、7000、7001、7200、2311-2313、8188。本端端口不是教程默认的 10011/11011。

五、重启后全自动流程回顾

服务器开机
├─ BaoYu 网关自动启动(8188) 原有机制
└─ dof-run.service 触发 本次部署
├─ 防重复检查(已有 df_game_r → 跳过)
├─ 轮询等 MySQL 3306 就绪(最多300秒)
├─ 执行 /root/run(全套服务+三国频道)
└─ PVF 加载 13~15 分钟 → 10012/10052/10056 自动上线
结语:现在重启服务器什么都不用做,等一刻钟五国自己上来;SSH 一登录就能看到红绿状态和进度条;想重跑永远只敲 /root/dof-restart.sh。
DNF私服运维实战系列二 · GYY-XG-8H8G 实机部署记录 · 上一篇:《DNF私服跑不出五国排查修复图文攻略》
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容