首页 > 解决方案 > 注销后保持 node.js express 运行

问题描述

我已经设置了一个以 pm2 开头的 node.js 应用程序一切正常

我还尝试添加监视和保存选项(请参阅下面有关 Windows 服务的更多信息)

pm2 start app.js --watch
pm2 save

但最终在我从 Windows RDP注销后,该应用程序不再运行。

在相关输出下方pm2 report

==
PM2        | 2021-04-10T11:26:39: PM2 log: --- New PM2 Daemon started ----------------------------------------------------
PM2        | 2021-04-10T11:26:39: PM2 log: Time                 : Sat Apr 10 2021 11:26:39 GMT+0200 (Central European Summer Time)
PM2        | 2021-04-10T11:26:39: PM2 log: PM2 version          : 4.5.6
PM2        | 2021-04-10T11:26:39: PM2 log: Node.js version      : 14.16.1
PM2        | 2021-04-10T11:26:39: PM2 log: Current arch         : x64
PM2        | 2021-04-10T11:26:39: PM2 log: PM2 home             : V:\.pm2
PM2        | 2021-04-10T11:26:39: PM2 log: PM2 PID file         : V:\.pm2\pm2.pid
PM2        | 2021-04-10T11:26:39: PM2 log: RPC socket file      : \\.\pipe\rpc.sock
PM2        | 2021-04-10T11:26:39: PM2 log: BUS socket file      : \\.\pipe\pub.sock
PM2        | 2021-04-10T11:26:39: PM2 log: Application log path : V:\.pm2\logs
PM2        | 2021-04-10T11:26:39: PM2 log: Worker Interval      : 30000
PM2        | 2021-04-10T11:26:39: PM2 log: Process dump file    : V:\.pm2\dump.pm2
PM2        | 2021-04-10T11:26:39: PM2 log: Concurrent actions   : 2
PM2        | 2021-04-10T11:26:39: PM2 log: SIGTERM timeout      : 1600
PM2        | 2021-04-10T11:26:39: PM2 log: ===============================================================================


Please copy/paste the above report in your issue on https://github.com/Unitech/pm2/issues

我想知道 pm2 主路径是否可能是根本原因,因为它是用户共享,但我已经找到了如何通过PM2_HOMEenv var 在 Windows 上更改它,但它也不起作用。

我搜索了 github 问题,似乎那里已经有类似的未解决问题,例如这个

如果我直接进入服务器启动 pm2 并注销用户,也会发生同样的情况,所有进程都将消失。有没有办法在全球范围内在寡妇上启动 pm2,这样当用户注销时它就不会退出?或者我做错了什么?

我还想了解在从 Windows 服务中注销用户后是否有任何选项可以让应用程序继续运行

有人在这里有解决方案吗?

我还尝试按照此处自述pm2-windows-service文件中的描述设置 with admin cmd 。

我在 express 应用程序中添加了 SIGTERM 的处理程序:

app.listen(HTTP_PORT, () => {
    console.log("Server is listening on port " + HTTP_PORT);
});

process.on('SIGINT', function() {
    console.log('Do not shut down the app on user log-off');
    //server.close();
  });

标签: node.jsexpresspm2windows-server-2016

解决方案


PM2主路径和应用程序路径中有一个strane最终空间,当我尝试在资源管理器中重命名它时,该文件夹被锁定(多次重新启动后仍然“锁定”......最终使用这种特殊语法删除)。用下划线更改了空格,我已经重新启动了虚拟机并发出了

pm2 reloadLogs
pm2 report

最后我通过 pm2 重新启动并再次保存了应用程序。

之前pm2 save,请注意pm2-service-install在您的admin cmd 提示符中输出的注释非常重要。

PM2_HOME 值(此路径应该可供服务用户访问,并且 不应包含任何“用户上下文”变量[例如 %APPDATA%]):F:\Appl\pm2

首次启动服务后pm2-service-install仍需手动操作。进一步设置“以本地系统帐户登录”并标记允许服务与桌面交互”。

注销并再次重新启动虚拟机以仔细检查:pm2 应用程序现在运行良好(尽管我必须使用 pm2 和admin cmd)。

如果您部署需要新环境变量的更新,请使用

pm2 restart 0 --update-env
pm2 save

不要忘记save之后--update-env

检查您的应用程序(例如 id 0)

pm2 env 0

在这种情况下,请记住,您可以通过重新启动 PM2 服务(或者,当然,重新启动机器)来进行快速检查/测试。


推荐阅读