如何让Windows 10关机时给Minecraft服务器关机脚本足够运行时间?
解决Windows关机时未给Minecraft服务器脚本足够执行时间的方案
一、调整Windows系统关机超时参数
- 注册表修改:
- 打开
regedit,定位路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control - 找到
WaitToKillServiceTimeout字符串值(无则新建),将默认的5000(5秒)改为更大数值,比如30000(30秒) - 同时修改同路径下的
HungAppTimeout和WaitToKillAppTimeout,同样设为30000,确保应用有足够响应时间
- 打开
- 组策略配置:
- 打开
gpedit.msc,进入计算机配置>管理模板>系统>关机选项 - 启用「关闭会阻止或取消关机的应用程序的自动终止功能」,并将「关闭前超时」设为所需时长(如30秒)
- 打开
二、重构关机脚本的执行逻辑
不要依赖系统默认的异步脚本执行,改为主动控制关机流程:
- 示例批处理脚本:
@echo off :: 发送Minecraft服务器关闭指令(需提前配置RCON) rcon.exe -H localhost -P 25575 -p 你的RCON密码 stop :: 等待服务器完全关闭,根据实际情况调整时长 timeout /t 20 /nobreak >nul :: 触发系统关机 shutdown /s /t 0
- 任务计划触发优化:
- 创建新任务,触发器选择「系统事件」,日志选「系统」,来源选
User32,事件ID选1074(系统关机事件)或UPS低电量对应事件 - 操作指向你的MC关机脚本,勾选「允许最高权限运行」,并设置任务超时时间
- 创建新任务,触发器选择「系统事件」,日志选「系统」,来源选
三、实用Workaround技巧
- 给MC服务器安装插件辅助关机:比如Spigot/Paper生态的
EssentialsX,配置低电量触发自动保存、玩家通知和服务器关闭逻辑 - PowerShell精准控制脚本:
# 通过API发送关机指令(需MC服务器开启API支持) Invoke-WebRequest -Uri "http://localhost:25575/api/v1/stop" -Headers @{"Authorization"="Bearer 你的API令牌"} # 循环等待Java进程结束 do { Start-Sleep -Seconds 5 $mcProcess = Get-Process -Name "java" -ErrorAction SilentlyContinue } while ($mcProcess -ne $null) # 执行系统关机 Stop-Computer -Force
- 禁用快速启动:打开「电源选项>选择电源按钮的功能>更改当前不可用的设置」,取消勾选「启用快速启动」,避免快速启动跳过脚本执行流程
四、第三方工具推荐
- Shutdown Blocker:可拦截系统关机请求,先执行自定义脚本再放行关机,支持设置延迟时长
- AutoHotkey:编写轻量脚本监听系统关机事件,优先完成MC服务器关闭后再允许关机
- NUT Windows客户端:第三方UPS监控工具,可自定义低电量触发动作,优先执行MC关机脚本再触发系统关机
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

