我们目前使用 pm2 来保持 Nodejs 进程的活动,我们不使用集群模式(以及相关的负载平衡功能)。
我们的 php 团队使用supervisord 来实时管理他们的 php 进程,正如 laravel 建议的那样。现在我们正在研究使用supervisord 来管理我们的nodejs 进程的可能性。 我们主要需要进程管理器做两件事,保持进程处于活动状态并在进程崩溃和重新启动时记录事件。
在保持进程存活方面,我确实发现 pm2 和supervisord 有一些相似之处。但pm2有更多重启政策,例如pm2 有一个 CRON 时间,而supervisord 没有(如果我错了,请纠正我)。如果没有 cron time 功能,我们将不得不求助于 cronjob,所以这是一个很好的功能,但不是必须的。
supervisord有进程组和优先级,根据我使用节点的经验,我没有找到很多用例。
所以对我们来说,这似乎是可行的,但是我们没有足够的supervisord经验,我们担心我们可能会在这里错过一些东西,特别是像你这样的大佬一开始就不应该这样做!以前有人这样做过吗?
顺便说一句,我的问题与在虚拟环境中使用node.js pm2运行python脚本
相反---更新---
最近又有人问我这个问题。
这对我来说不是优先考虑的事情,所以我没有进一步调查这个问题。但是因为我在 pm2 中没有使用集群,所以我绝对认为这是可行的,请查看这篇文章使用supervisor永远运行NodeJs应用程序,supervisor conf文件应该如下所示,
[program:start_script]
command=/var/www/nodeapp/start.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/start.err.log
stdout_logfile=/var/log/start.out.log
当您使用pm2或supervisord时,崩溃消息将被pm2或supervisord隐藏。所以关键是,当worker崩溃时,你应该有能力知道它,比如破解pm2程序,当worker崩溃时,向监控系统发送消息。