You need to enable JavaScript to run this app. Windows下PM2托管Node.js Express应用 登出RDP后进程终止问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Windows下PM2托管Node.js Express应用 登出RDP后进程终止问题求助

Markdown 排版规范
  • 标题使用井号(#)开头标注层级
  • 列表项使用短横线(-)开头编写
  • 需要重点强调的文本使用星号(*)包裹
  • 代码、命令类内容使用反引号(`)包裹
  • 引用类内容使用大于号(>)开头标注
  • 链接格式为[链接文本](链接地址)
  • 图片格式为[图片替代文本](图片地址)
Windows 环境PM2 托管应用随RDP登出停止的解决方案

核心原因

  • 默认启动的PM2守护进程完全关联当前登录用户的会话上下文,RDP登出时Windows会强制回收该用户会话下的所有进程资源,这和PM2_HOME路径设置、应用内的信号捕获逻辑无直接关联
  • 常规安装pm2-windows-service时如果未指定独立运行身份、未同步系统级环境变量,生成的Windows服务仍会继承原登录用户的会话权限,无法脱离用户会话独立运行

操作步骤

  • 清理旧配置残留
    以当前用户权限执行命令,杀掉所有运行中的PM2进程:
    pm2 kill
    手动删除当前用户目录下旧的.pm2配置文件夹,避免旧配置干扰新部署
  • 配置系统级PM2_HOME环境变量
    手动创建独立的非用户专属目录,比如C:\pm2\home
    打开系统环境变量配置面板,新增系统级环境变量(非用户级):
    变量名:PM2_HOME
    变量值:C:\pm2\home
    配置完成后重启服务器,确保环境变量对所有系统服务生效
  • 重新部署PM2应用
    打开管理员权限的命令提示符,执行应用启动命令:
    pm2 start app.js --watch
    执行配置保存命令,将当前应用列表写入系统级的PM2配置文件:
    pm2 save
  • 配置独立运行的Windows服务
    先卸载之前安装的旧服务:
    pm2-service-uninstall
    重新安装服务,指定系统内置的SYSTEM账号作为运行身份:
    pm2-service-install -n PM2-Runtime -u SYSTEM

避坑提醒

  • 不需要在应用内捕获SIGINT、SIGTERM等退出信号阻止进程关闭,Windows服务管理时会通过系统机制通知PM2守护进程完成平滑重启,强行捕获信号反而会导致服务检测到进程僵死,强制终止应用
  • 不要将PM2_HOME配置在用户专属目录(比如用户挂载的网络盘、系统盘的用户文件夹路径下),系统级服务没有权限读取这类路径下的配置
  • 服务安装全流程必须使用管理员权限操作,否则生成的服务会被注册为用户级服务,仍会随用户登出被回收

验证方法

打开Windows服务管理器,找到新建的PM2-Runtime服务,将启动类型设置为“自动(延迟启动)”
完全断开RDP会话,等待1分钟后重新登录服务器,执行pm2 list确认应用仍处于运行状态

内容的提问来源于stack exchange,提问作者user11323942

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 14:15:04