·跑传奇单机版时间长了,迟早会遇到一个问题: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,执行:
[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每天自动清理,运行两个月多没有出现不知道就挂了好几小时的情况了。
传奇单机版的乐趣在于折腾数值、调玩法,不是在守着服务端等它挂。把稳定性这关先过了,才能安心搞其他东西。
|