PM2进程在重启后消失

27

我正在使用PM2将我的节点应用程序作为服务运行。由于我节点应用需要消耗大量内存,因此根据流量需求,它需要占用300到800MB的内存。我的DigitalOcean droplet只有1GB RAM。

有时候,我的应用程序会突然从运行中的服务中消失,当我执行pm2 list命令时,看不到任何内容。

据我所知,pm2应该能够自己处理这种崩溃情况,并在发生这种崩溃时重新启动应用程序,但是它没有重新启动任何东西。

现在,我正在寻找一些解决方案,可以在应用程序崩溃时自动重新启动我的应用程序,而且我必须使用pm2将其作为服务使用。

2个回答

62
你能检查一下日志,看看机器是否重新启动了吗?
你可以使用这个命令来查看最后一次重启的时间:
last | grep reboot

甚至连这个
uptime

查看运行时间的命令。
如果是这样的话,那应该就是问题所在。pm2对此有一个很好的解决方案管理:
$ pm2 startup         # Detect init system, generate and configure pm2 boot on startup
$ pm2 save            # Save current process list
$ pm2 resurrect       # Restore previously saved processes
$ pm2 unstartup       # Disable and remove startup system

如果您的应用程序在需要打开防火墙的端口上运行,您也需要对防火墙进行相同类型的保存。在Ubuntu上,我知道有一个非常好的软件包可以做到这一点,但我相信在任何系统上都能找到类似的东西。

1
我刚刚编辑了我的答案,并提供了一些Linux命令的示例,用于查看相关信息。虽然我不知道您使用的是哪个发行版,但我非常确信,如果我的示例还不够,您很容易找到相关信息。 - Alburkerk
哦,我检查了一下,这台机器已经运行了很长时间,PM2进程只是从列表中消失了。它是Ubuntu 16.04 LTS。 - Usman Tahir
你能否尝试手动启动守护进程,然后重新启动你的机器?使用shutdown -r now命令即可完成重启(不要忘记加上-r参数以实现重启而非简单关机)。然后看看你的进程是否已经消失(如果你已经按照我的回答所说的步骤进行了操作,请先关闭进程)。 - Alburkerk
@Alburkerk,我很想知道您使用的防火墙软件包是哪个。 - ans1genie

5

你只需要运行三个命令。首先:

pm2 startup

然后复制并执行它显示的命令,类似于这样:

sudo env PATH=$PATH:/home/user/.nvm/versions/node/v18.12.1/bin /home/user/.nvm/versions/node/v18.12.1/lib/node_modules/pm2/bin/pm2 startup systemd -u user --hp /home/user

最后:

pm2 save

这样做,下次系统重启时,所有 pm2 进程都将自动启动。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接