【问题标题】:PM2 keeps getting killed every 90 seconds on centos 8PM2 在 centos 8 上每 90 秒就会被杀死一次
【发布时间】:2020-10-30 00:42:37
【问题描述】:

我刚刚安装了 CentOS 8 并添加了 nodejs(尝试了 v12 和 v14)然后我使用 npm install pm2@latest 安装了 pm2(所以在发布时它使用 v4.4.0)。我确实尝试过旧版本(v3.5.0),但它的作用完全相同。

在安装了 pm2 之后,我运行了命令“pm2 startup”

重新启动后,pm2 确实启动,但在 90 秒后被杀死,然后重新启动并给出此消息

"pm2 已被信号杀死,退出前转储进程列表..."

首先,我认为这是因为我的应用程序(应该由 pm2 管理的应用程序),但我从 pm2 中删除了它,所以它实际上是空的,但它做同样的事情

【问题讨论】:

  • 我在 RHEL 8.2 节点 v12.16.1 上看到了同样的情况。每90秒pm2 has been killed by signal, dumping process list before exit...你有没有找到解决办法?我在我的日志中看不到任何有用的东西。我在另一个环境中运行相同的版本和设置,但我没有看到那里的问题。但每 90 秒重新启动一次。
  • 我也有类似的问题。它并不总是 90 秒,有时是 60 秒,有时是 120 秒。我确实发现 pm2 每 30 秒测试一次内存使用情况,这似乎是相关的,但还没有发现任何东西。
  • 你有什么发现吗?同样的事情发生在我身上,每次正好 90 秒。无论我只是运行一个 API 还是多个 API,整个 pm2 进程都会重新启动..
  • 是的,请阅读以下内容(3 个选项)。现在使用第二个或第三个。

标签: pm2 centos8


【解决方案1】:

我遇到了同样的问题,我在网上尝试了几种解决方案,但没有一个对我有用。

但是,我完全删除了pm2,重新启动了服务器,然后重新安装了pm2,这样就完成了。

1- 停止并删除pm2

pm2 kill
sudo npm remove pm2 -g

2- 重启服务器

sudo reboot

3- 再次登录,然后重新安装 pm2

sudo npm install -g pm2

【讨论】:

  • 你不妨删除它,因为它与 Ubuntu 无关。这是一个 SELinux 问题,没有随 Ubuntu 一起安装。
  • @shakirah 最后一步错字:“pm”,需要“pm2”
  • 这似乎解决了我的问题。谢谢:)
  • 为我解决了,但我也必须这样做:“pm2 update”
  • 在 ubuntu 服务器上运行,这也为我解决了。 sudo service pm2-ubuntu status 表示无法读取 PID 文件。重新安装后不再显示此错误
【解决方案2】:

稍后更新。对于那些面临同样问题的人。这是与 SE Linux 相关的问题。已知的解决方法(我发现的那些)。

  1. 禁用 SE Linux(显然,不推荐)

  2. 转到 /etc/systemd/system/pm2-root.service - 注释 PIDFile=...(在该行前面添加 #)

  3. 审计和跟踪 - 使用以下命令:

     # dnf install policycoreutils-python-utils setroubleshoot-server -y
     # journalctl -f
    

    此时,您应该在输出(日志)中看到解决方案 它应该是这样的:

    # ausearch -c 'systemd' --raw | audit2allow -M my-systemd
    # semodule -i my-systemd.pp
    

    您需要执行最后一步(ausearch... 和 semodule...)两次 - 我做了一次,重新启动机器并在 90 秒后发现同样的问题。但是如果你仔细阅读日志,你会发现问题似乎输出了两次。 (看起来一样)。可能有两件事正在尝试写入该文件(pm2-root.service)。

仍在等待完美的解决方案(由真正知道如何以适当方式解决此问题的人完成),但对于遇到此问题的人来说,这些选项中的任何一个似乎都可以正常工作。

【讨论】:

  • 我认为禁用 SE Linux 不安全
  • 选项 2 似乎对我有用。谁能解释一下这是如何工作的?
  • 使用选项 2 然后重新启动服务器。问题解决了。有什么安全问题吗?不知道这是如何工作的。顺便说一句,我在 Ubuntu 上
  • 我必须应用选项 2 以及以下步骤:步骤 1:使用 systemctl 停止 pm2 / 步骤 2:sudo npm i -g pm2@latest / 步骤 3:sudo systemctl daemon-reload / 步骤 4 : 使用 systemctl 再次启动 pm2
【解决方案3】:

我没有禁用 SE Linux(我认为禁用它不安全),但以下方法帮助了我:

编辑文件:/etc/systemd/system/pm2-root.service

  1. 添加新行:Environment=PM2_PID_FILE_PATH=/run/pm2.pid

  2. 并将:PIDFile=/root/.pm2/pm2.pid 替换为:PIDFile=/run/pm2.pid

版本:

  • CentOS 8.3.2011
  • Node.js 14.16.0
  • NPM 7.7.5
  • PM2 4.5.5

Original answer。谢谢亚历克!

【讨论】:

  • 我在 Fedora 中遇到了同样的问题,为不同于 root 的用户实例化了 pm2。为了避免更改权限,我使用了 /tmp/ 文件夹而不是 /run/ 文件夹
【解决方案4】:

以 root 身份运行以下命令对我有用:

pm2 update

【讨论】:

  • 您能否提供有关此命令作用的更多详细信息?
  • 它会更新 pm2 本身。
【解决方案5】:

我遇到了这个问题(在 Debian 上),由于某种原因,两个“PM2 God Daemon”进程(不是线程)被启动,所以它们相互冲突。

杀死其中一个解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2019-06-06
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多