查看: 8|回复: 0

传奇单机版服务端崩了怎么自动拉起来?三种守护方案实测对比

106

主题

44

回帖

552

积分

二百VIP

积分
552
发表于 昨天 13:57 | 显示全部楼层 |阅读模式
二百论坛
本站支持代销互换开区传奇版本、欢迎广大GM、技术、一条龙等传奇业界好友合作、联系业务QQ:1531850810

QQ交流群①:323634742(推荐 )QQ交流群②:764544814(推荐)

本站提供的传奇版本 由于来源不同 精力有限 无法100%测试 如需使用本传奇版本请切记

下载传奇版本后 先解压 再杀毒 更新官方引擎 最后再配置登陆器 避免被非法木马插件利用


玩传奇单机版架设的朋友,肯定遇到过这种情况:服务器开着好好的,人去吃饭回来发现M2进程没了,玩家全掉线,群里炸锅。

尤其翎风引擎,脚本写得稍微激进一点——GOTO用多了、怪物刷太猛、定时器间隔太短——M2直接闪退。更烦的是崩溃时间不确定,半夜三点崩了你根本不知道,第二天发现服已经挂了一整晚。

今天聊的就是这个问题:传奇单机版服务端崩溃后怎么自动拉起来?我测试了三种方案,各有优劣。

方案一:bat批处理守护脚本(最简单)

这个方案最原始,但胜在门槛低,不需要装任何额外工具。原理就是写一个bat文件,循环检测M2进程是否存活,如果检测到进程不在了就重新启动。
  1. @echo off
  2. :loop
  3. tasklist | find "M2.exe" >nul
  4. if errorlevel 1 (
  5.     echo %date% %time% M2已停止,正在重启... >> restart.log
  6.     cd /d D:\Mirserver
  7.     start "" M2.exe
  8. )
  9. timeout /t 10 /nobreak >nul
  10. goto loop
复制代码

把这段保存成 watchdog.bat,跟M2放同一目录,双击运行就行。每隔10秒检测一次进程,M2没了就自动拉起来。

优点:零依赖,复制粘贴就能用,Windows自带。
缺点:功能太简陋——无法区分"正常关闭"和"异常崩溃",无法记录崩溃原因,检测间隔短了浪费CPU,长了响应慢。而且如果你手动关闭M2想维护,它马上又给你拉起来,很烦。

方案二:Python守护脚本(推荐)

如果你服务器上装了Python(或者本身就是用Python做自动化运维的),可以写个稍微智能点的守护脚本。核心逻辑跟bat一样,但加了几个实用功能:
  1. import subprocess, time, os, logging
  2. M2_PATH = r"D:\Mirserver\M2.exe"
  3. CHECK_INTERVAL = 15
  4. LOG_FILE = r"D:\Mirserver\watchdog.log"
  5. MANUAL_STOP_FLAG = r"D:\Mirserver\.stop_flag"
  6. logging.basicConfig(filename=LOG_FILE, level=logging.INFO,
  7.     format="%(asctime)s %(message)s")
  8. while True:
  9.     if os.path.exists(MANUAL_STOP_FLAG):
  10.         logging.info("检测到停止标志,守护退出")
  11.         break
  12.     result = subprocess.run("tasklist", capture_output=True, text=True)
  13.     if "M2.exe" not in result.stdout:
  14.         logging.warning("M2进程不存在,正在重启...")
  15.         subprocess.Popen(M2_PATH, cwd=os.path.dirname(M2_PATH))
  16.         logging.info("M2已重新启动")
  17.     time.sleep(CHECK_INTERVAL)
复制代码

这个脚本比bat多几个功能:带时间戳日志、支持手动停止(创建.stop_flag文件就不再自动拉起)、检测间隔可配置。

优点:灵活可控,日志清晰,支持区分维护重启和异常重启。
缺点:需要Python环境,对纯小白有门槛。

方案三:vbs隐藏窗口+bat守护(适合长期后台运行)

上面的方案有个共同问题:窗口关了脚本就停了。如果你想让守护进程在后台默默运行、不占任务栏,可以用VBS包装:
  1. Set ws = CreateObject("WScript.Shell")
  2. ws.Run "cmd /c watchdog.bat", 0, False
复制代码

保存成 start_hidden.vbs,双击运行后看不到任何窗口,但守护脚本在后台跑着。配合任务计划程序设置开机自启,重启服务器后也不用手动启动守护。

优点:完全无感运行,开机自启,适合长期无人值守。
缺点:调试不方便,出问题了你不知道它在没在跑。

三个方案的踩坑提醒

不管你用哪种方案,有几个坑一定要注意:

第一,崩溃原因不查,重启一百次也没用。自动拉起来只是治标,M2反复崩溃说明脚本或配置有问题。我之前遇到过MonGen.txt里BOSS刷新坐标全写成了同一个点,每30分钟一次性刷500只怪,M2直接内存溢出闪退。守护脚本拉起来,过半小时又崩。最后查MonGen才知道问题。

第二,DBServer也要一起守护。很多人只守M2,但有时候崩的是DBServer,M2还在跑但连不上数据库,玩家一样掉线。建议守护脚本同时检测M2.exe和DBServer.exe两个进程。

第三,重启间隔别太短。M2刚崩的时候,端口可能还没释放(尤其是7000网关端口),立刻拉起来会报"端口占用"。建议检测到进程不存在后等5-10秒再启动。

第四,翎风引擎自带的崩溃保护要开着。翎风M2的选项→功能设置里有个"异常时自动重启"选项,这个跟守护脚本是两回事——引擎自身检测到异常会尝试重启,但有些类型的崩溃引擎自己抓不住(比如内存被操作系统强制回收)。建议两者配合用。

最后说一句

自动守护是最后手段,真正该做的是让M2少崩溃。把MonGen刷新时间错开、控制怪物总量、定时器间隔改到5秒以上、少用GOTO多用DELAYGOTO——这些优化做完了,M2可能一个星期都不会崩一次。

有问题的留言问,看到就回。
二百论坛
免责声明:

1、本论坛资源均来源于网络

2、如下载使用,自行杀毒

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ| 小黑屋|二百版本库 |网站地图

免责声明:本站所有资源皆来自于互联网.请在下载使用内24小时内删除! 如果侵犯了您的权益,请至邮箱: (1531850810@qq.com), 我们会及时删除侵权内容。

Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5

关于我们 | 联系方式 | 隐私政策