如何让GitHub+ngrok搭建的Windows VPS长期保持在线
Windows VPS运行30分钟自动关机的解决方法
排查优先级从高到低
- 先查GitHub Actions的默认超时限制
你这套用GitHub+ngrok搭的Windows实例本质跑在GitHub Actions的Job runner上,免费版GitHub Actions单个Job默认超时就是30分钟,到点平台直接强制销毁运行环境,表现就是和正常关机一模一样的断网下线。
修复方法:打开仓库.github/workflows目录下的工作流yaml配置,找到timeout-minutes参数,把默认的30改成你需要的数值,免费版单个Job最长支持设为360分钟(6小时)。 - 排查脚本里的主动关机逻辑
逐行检查对应项目仓库里的bat、PowerShell启动脚本,删掉所有类似shutdown /s /t 1800的定时关机命令;另外注意很多现成的封装脚本会在检测到ngrok隧道断开、程序异常退出时直接执行关机,把这类逻辑改成自动重启对应进程就行,别一出错就关机。 - 解决ngrok空闲断连触发的关机
免费版ngrok默认规则是隧道连续5分钟没有流量就会自动回收断开,不少脚本会把ngrok退出作为关机触发条件。
对应调整:- 在启动脚本里加心跳任务,每隔3-5分钟用
curl打一次ngrok分配的公网地址,保持隧道持续有流量,避免被判定为空闲回收 - 加简单的进程守护逻辑,检测到ngrok进程挂了就自动重新启动,不要直接执行关机命令
- 在启动脚本里加心跳任务,每隔3-5分钟用
- 调整Windows实例内部的电源配置
实例启动后先改几个系统设置,避免系统自己触发休眠、关机:- 管理员身份打开命令提示符,执行
powercfg /h off直接关闭系统休眠功能 - 把电源计划切换为高性能模式,把所有“无操作N分钟后自动睡眠/休眠/关闭硬盘”的选项全部设为“从不”
- 打开任务计划程序库,扫一遍所有计划任务,把触发条件为“系统启动后30分钟”、执行动作是关机的任务全部禁用
- 管理员身份打开命令提示符,执行
长时在线优化
GitHub Actions免费版本身有单Job最长6小时、账号每月总运行时长2000分钟的额度限制,不可能靠单次启动实现永久在线。可以在工作流配置里加自动续跑逻辑:当前Job运行到5小时50分左右的时候,自动调用GitHub API触发新的Job启动,同时提前给ngrok配置固定隧道(免费版支持绑定固定TCP地址),避免每次重连公网地址变化,就能实现近似不间断运行的效果。
内容的提问来源于stack exchange,提问作者Hammad Tanveer
相关产品推荐
相关产品推荐

