查看: 30|回复: 0

传奇单机版M2挂死不自动重启?守护进程工具配置全攻略,稳定运营必看

[复制链接]

升级   100%

56

主题

6

回帖

1342

积分

管理员

传奇小学生

金币:
  600
元宝:
  330
积分:
  1342 点

活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 6 天前 | 显示全部楼层 |阅读模式
·跑传奇单机版时间长了,迟早会遇到一个问题:M2Server.exe突然挂死,服里所有人掉线,你没在电脑旁边,一两小时后才发现,日志里只有一行含糊的报错,也找不到根本原因。

这种事发生一次还好,发生几次之后你就知道了——光靠"不让它挂"是不够的,还得让它"挂了自己起来"。

今天说的就是这件事:传奇单机版服务端守护进程配置,把M2Server挂死后的自动重启搞定,然后顺带讲一下进程监控工具怎么用。

---

先说为什么M2会挂死

挂死的原因很多,但常见的就那几类:

一、脚本死循环。某个QFunction里写了个计时器嵌套,条件永远成立,M2逻辑线程跑满,系统慢慢失去响应。

二、Logs目录撑满。默认情况下翎风引擎不限制日志文件大小,跑几个月日志文件能有十几个G,磁盘写不进去,M2开始卡顿直到挂死。

三、假人内存泄漏。跑了大量假人的单机版,如果假人脚本里有内存没释放的逻辑,时间一长M2占用内存会涨到几个G,系统OOM,进程被强杀。

四、数据库文件损坏。SQLite或Access DB在意外断电后文件损坏,M2启动时读不到数据,僵死在那里。

---

方案一:用批处理做最简单的守护循环

最土但最有效的办法。新建一个 guard_m2.bat,内容如下:
  • @echo off
  • :loop
  • echo [%date% %time%] 启动M2Server...
  • start /wait "M2" "D:\LF传奇单机版\GameSvr\M2Server.exe"
  • echo [%date% %time%] M2Server已退出,5秒后重启...
  • timeout /t 5 /nobreak
  • goto loop

[color=rgb(29, 80, 161) !important]复制代码


把这个bat文件放在M2Server.exe同目录,每次开服改成运行这个bat而不是直接运行M2Server.exe。

原理很简单:start /wait 会等M2进程结束,一旦M2退出(无论是崩溃还是正常关闭),循环继续,5秒后重新拉起来。

注意两个坑:

坑一:start /wait 后面的路径必须用绝对路径,不要用相对路径。否则在不同目录运行bat时找不到exe。

坑二:这个方案无法区分"正常关闭"和"崩溃退出"。如果你想手动维护停服,不能直接Ctrl+C关bat,要先关M2再关bat。否则bat会立刻重启M2,让你很尴尬。

---

方案二:用NSSM把M2注册成Windows服务

NSSM(Non-Sucking Service Manager)是一个免费小工具,专门把任意exe注册成Windows系统服务,系统服务可以配置"崩溃后自动重启",比bat方案更稳。

下载解压后,管理员权限运行cmd,执行:
  • nssm install M2Guard

[color=rgb(29, 80, 161) !important]复制代码


弹出配置界面后:
- Path:M2Server.exe的完整路径
- Startup directory:M2Server.exe所在目录
- Arguments:留空

点Install Service,服务创建完成。

然后配置自动重启:
  • nssm set M2Guard AppRestartDelay 5000

[color=rgb(29, 80, 161) !important]复制代码


意思是M2崩溃5000毫秒(5秒)后自动重启。

用命令管理服务:
  • nssm start M2Guard     # 启动
  • nssm stop M2Guard      # 停止
  • nssm restart M2Guard   # 重启

[color=rgb(29, 80, 161) !important]复制代码


NSSM的好处:系统重启后服务自动跟着起来,不需要手动开服;日志也会记录进Windows事件日志,排查崩溃原因更方便。

---

方案三:PowerShell脚本监控+进程检测

如果你不在电脑旁边,想知道M2挂死了,可以用PowerShell写一个监控脚本:
  • while ($true) {
  •     $proc = Get-Process -Name "M2Server" -ErrorAction SilentlyContinue
  •     if (-not $proc) {
  •         $time = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
  •         Add-Content -Path "D:\m2_restart_log.txt" -Value "$time M2Server挂死,执行重启"
  •         Start-Process "D:\LF传奇单机版\GameSvr\M2Server.exe"
  •     }
  •     Start-Sleep -Seconds 30
  • }

[color=rgb(29, 80, 161) !important]复制代码


每30秒检查一次M2进程是否存在,不存在就记录日志并重启。

---

配套必做:Logs目录定期清理

光有守护进程还不够,Logs目录不处理迟早再挂。可以在bat或计划任务里加上:
  • forfiles /p "D:\LF传奇单机版\Logs" /m *.txt /d -7 /c "cmd /c del @path"

[color=rgb(29, 80, 161) !important]复制代码


意思是删除7天前的日志文件。每次开服前跑一次,保持Logs目录干净。

---

进程监控工具推荐

除了守护重启,日常监控也很重要,推荐两款免费工具:

Process Hacker 2(免费开源)
- 可以看M2Server实时CPU、内存占用,出现异常趋势提前发现
- 支持设置进程崩溃时触发通知

HWMonitor(免费)
- 看服务器机器CPU温度和磁盘状态
- 温度过高也会导致M2出问题,排查时有用

---

三种方案对比

方案难度稳定性停服便捷度
bat守护循环最简单够用稍麻烦
NSSM服务中等最稳命令行控制
PowerShell脚本中等灵活可扩展


纯单机自己玩,bat方案够了;有人来玩或者想稳定运营,上NSSM;想知道挂没挂,PowerShell加检测逻辑。

这几个方案不冲突,可以组合用。自己现在是NSSM注册服务+PowerShell每30秒检查+Logs每天自动清理,运行两个月多没有出现不知道就挂了好几小时的情况了。

传奇单机版的乐趣在于折腾数值、调玩法,不是在守着服务端等它挂。把稳定性这关先过了,才能安心搞其他东西。
九零推荐
元宝提现比例:1元 = 10元宝
提现手续费仅为:5% 单次提现100元起(就是提现100元,到账95元,比所谓大站比例高的多)为了把所有收入返回到GM手中
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则