我正在使用pm2来管理节点进程。当前,即使pm2干净完成(退出代码为0),它也会重新启动节点进程。我不希望那样发生。
相反,我只希望当节点进程以代码!= 0退出时,PM2重新启动应用程序。
这该怎么做?
pm2日志可能有用:
PM2 | App [xxx] with id [0] and pid [44797], exited with code [0] via signal [SIGINT]
PM2 | Starting execution sequence in -fork mode- for app name:xxx id:0
PM2 | App name:xxx id:0 online
Run Code Online (Sandbox Code Playgroud)
编辑:
似乎在群集模式下启动过程按预期工作。即:重启仅在退出代码!= 0上发生。
仍然以fork模式启动会产生上述意外行为。
我看过代码 pm2
https://github.com/Unitech/pm2/blob/6090b0971abca6fcb2d796e560f2a72b81ab5707/lib/God.js
并且在成功退出时不启动进程方面似乎没有任何逻辑。您要求的功能不存在。集群模式和分叉模式都是一样的。
您可以测试使用 test.js
setTimeout(()=>process.exit(), 2000);
Run Code Online (Sandbox Code Playgroud)
叉模式
setTimeout(()=>process.exit(), 2000);
Run Code Online (Sandbox Code Playgroud)
$ pm2 start test.js && sleep 5
[PM2] Starting /Users/tarunlalwani/Documents/Projects/SO/pm2exit/test.js in fork_mode (1 instance)
[PM2] Done.
????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? App name ? id ? version ? mode ? pid ? status ? restart ? uptime ? cpu ? mem ? user ? watching ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? test ? 0 ? N/A ? fork ? 5889 ? online ? 0 ? 0s ? 0% ? 9.4 MB ? tarunlalwani ? disabled ?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Use `pm2 show <id|name>` to get more details about an app
$ pm2 logs
PM2 | 2019-08-18T11:40:23: PM2 log: App [test:0] exited with code [0] via signal [SIGINT]
PM2 | 2019-08-18T11:40:23: PM2 log: App [test:0] starting in -fork mode-
PM2 | 2019-08-18T11:40:23: PM2 log: App [test:0] online
PM2 | 2019-08-18T11:40:25: PM2 log: App [test:0] exited with code [0] via signal [SIGINT]
PM2 | 2019-08-18T11:40:25: PM2 log: App [test:0] starting in -fork mode-
PM2 | 2019-08-18T11:40:25: PM2 log: App [test:0] online
$ pm2 delete test
Run Code Online (Sandbox Code Playgroud)
选择
作为替代方案,您可以使用Supervisord
您可以exitcodes在配置文件中使用
http://supervisord.org/configuration.html
此程序的“预期”退出代码列表与
autorestart. 如果该autorestart参数设置为unexpected,并且进程以任何其他方式退出,而不是作为主管停止请求的结果,supervisord 将重新启动进程,如果它以未在此列表中定义的退出代码退出。
这个帖子迟到了,但我相信 pm2 现在支持这个。查看https://pm2.keymetrics.io/docs/usage/restart-strategies/和“跳过特定退出代码的自动重启”部分
编辑:抱歉,这还不是解决方案。这里有一个与 pm2 选项相关的未解决问题:https ://github.com/Unitech/pm2/issues/5208 。从表面上看,我不认为它会很快得到解决。因此,上述选项应该有效,但我认为目前在撰写本文时的 pm2 当前版本(5.1.12)中不起作用
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |