了解 node.js pm2 启动选项

understand node.js pm2 startup options

pm2 有以下命令行选项:

  startOrRestart <json>
  startOrReload <json>
  startOrGracefulReload <json>

但是它们之间有什么区别呢?

据我所知,如果应用程序尚未启动,请启动它们。所以让我们考虑应用程序(一个 HTTP 服务器)目前是 运行.

我假设 restart 强制应用程序停止并在之后重新启动它,并且 reload 将停止接受新连接,等待所有连接处理,然后重新启动应用程序。不同之处在于没有停机时间或重新加载的中止连接,但除此之外它的行为就像 restart (即应用代码更改)。

我的假设正确吗? startOrGracefulReload 有何不同?

如果应用程序尚未 运行,这三个命令将启动您的应用程序,因此,让我们集中精力在应用程序已经 运行 的情况下会发生什么。

startOrRestart:它将停止 JSON 文件中的所有应用程序,然后所有应用程序将再次启动。您将有停机时间。

startOrReload: 如你所见here:

As opposed to restart, which kills and restarts the process, reload achieves a 0-second-downtime reload.

因此,主要区别在于您没有停机时间。

startOrGracefulReload:同样,您可以阅读更多here

Sometimes you can experience a very long reload, or a reload that doesn't work (fallback to restart) meaning that your app still has open connections on exit. Or you may need to close all databases connections, clear a data queue or whatever.

To work around this problem you have to use the graceful reload.

因此,基本上 pm2 要求您的应用程序在重新加载之前退出,以防万一您有数据库连接或待处理请求等依赖项。您必须指定您的应用程序关闭所有现有连接所需的时间。然后,一个新进程将启动,当这个新进程说“嘿!我还活着!”时,您的旧进程将结束。