PM2 如何自动重启 Node.js 进程

阅读时长 6 分钟读完

Node.js 是一个非常流行的服务器端 JavaScript 运行环境,可以用于开发 Web 应用、命令行工具等等。但是,在一些情况下,Node.js 进程可能会意外终止,导致应用停止响应。为了确保应用的稳定性和可靠性,我们需要一种自动重启 Node.js 进程的机制。而 PM2 就是一种非常好用的 Node.js 进程管理工具,可以帮助我们实现自动重启功能。

什么是 PM2

PM2(Process Manager 2)是一个 Node.js 的进程管理器,可以方便地管理 Node.js 应用的生命周期,包括启动、停止、重启、监控等。PM2 还提供了很多高级功能,比如自动重启、负载均衡等等,让我们的应用更加健壮和高效。

自动重启 Node.js 进程的必要性

在生产环境中,Node.js 应用通常需要持续运行,保证系统的可用性和稳定性。但是,由于网络、硬件等原因,Node.js 进程可能会意外终止,导致应用停止响应。如果没有自动重启机制,我们就需要手动重启进程,这不仅浪费时间,而且容易出现漏重启等问题。

通过 PM2 实现自动重启,可以有效避免这些问题。当 Node.js 进程意外终止时,PM2 会自动重新启动进程,保证应用的持续运行。

如何实现自动重启

下面我们以一个简单的 Node.js 应用为例来介绍如何通过 PM2 实现自动重启。

首先,我们需要安装 PM2:

然后,我们编写一个简单的 Node.js 应用 app.js:

这个应用会创建一个 HTTP 服务器,监听 3000 端口,并在访问时返回一个 "Hello World" 的字符串。

接下来,我们使用 PM2 启动这个应用:

此时,应用已经在后台运行,并且由 PM2 管理。

现在,我们可以稍微改变一下 app.js 的代码,让进程意外终止:

-- -------------------- ---- -------
----- ---- - ----------------

-------------------------- ----- ---- -
  ------------------ ---------------- ---------------
  -------------- ----------
----------------

------------------- ------- -- -------------------------

-------------- -- -
  ----------------
-- -------

这段代码添加了一个定时器,每 10 秒就强制结束进程。

现在,我们可以使用 PM2 查看应用的状态:

输出应该是这样的:

我们可以看到,应用状态为 "errored",即进程意外终止了。

现在,我们只需要让 PM2 自动重启进程即可。PM2 默认会在进程意外终止时自动重启,但是这个功能默认是关闭的。我们可以通过设置 restart 参数来启用自动重启:

这里,我们设置了一个 5 秒的重启延迟,然后设置最大重启次数为 3 次。也就是说,如果进程连续意外终止 3 次以上,PM2 将不再自动重启。

现在,我们再次让进程意外终止,过一段时间后,PM2 会自动重启进程,并记录重启日志:

输出应该如下:

-- -------------------- ---- -------
--------- ------- ---- -- ----- --- ----- --------- ------- --- ----- ---- ------- -------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
---        - --- -------- ---- -- --- --- --- -------- ------ ---- ---- --- --- ------ ------
---        - -------- --- ------ -- --------- -- ---------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------
    --------     - ------ ------- -- ----------------------

我们可以看到,PM2 在重启进程后,重新输出了 "Server running at http://localhost:3000/",并且记录了重启日志。

总结

通过以上的示例,我们可以看到,PM2 的自动重启功能非常实用,可以帮助我们确保 Node.js 应用的稳定性和可靠性。不过,我们还需要注意一些细节,比如设置重启延迟和最大重启次数,避免重启次数过多导致系统负载过大等问题。当然,如果我们的应用比较复杂,PM2 还提供了更多高级功能,可以帮助我们更好地管理和监控应用的运行。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645f86a3968c7c53b01898ed

纠错
反馈