node.js - 注销后保持 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_HOME
env 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();
});
解决方案
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 服务(或者,当然,重新启动机器)来进行快速检查/测试。
推荐阅读
- f# - F#: [
] vs 覆盖 __.ToString()。¿ 怎么了? - delphi - delphi中的搜索自动化?
- python - 如何解决 Django 查询“'ExtractHour' 对象没有属性 'split'”错误?
- ios - 颤振 -
使用 google_sign_in 库时未找到 - r - 嵌套小标题,执行操作,以不同的形式取消嵌套和嵌套数据
- ionic-framework - 如何从 Firestore 集合创建一个 ion-reorder-group
- java - 如何以 .war 和 .jar 的形式构建/运行 maven 项目?
- symfony - FatalErrorException 编译错误:App\Controller\DefaultController::forward 的声明
- rdf - 如何使用 JSON-LD 序列化的 RDF 图来描述设备功能?
- java - 为什么在 jpanel.paintComponent() 中调用 setText() 方法时 JLabel 不刷新?