使用 PM2 API 重新启动,在 PM2 中运行时也重新启动脚本自身

问题描述

我想用 Javascript 编写一个脚本,通过 PM2 API 控制 PM2,并在 PM2 中运行。

pm2.js

var pm2 = require('pm2');

setTimeout(() => {
  restartProcess('client');
},2000); //After 2 seconds restart the 'client' process

function restartProcess(name) {

  pm2.connect(function(err) {
    if (err) {
      console.error(err);
      process.exit(2);
    }
    console.log ("restarting ",name)
    pm2.restart(name);

  pm2.disconnect;  
  })
  
}

当我仅在终端中运行 pm2.js 时,这可以正常工作。 但是当我在 PM2 中运行 pm2.js 时,脚本不断循环。 我检查了进程的正常运行时间,似乎不仅 client 重新启动,而且 pm2.js 本身也重新启动,并且在 2 秒后一次又一次,一次又一次......

如果我正在查看 pm2 logs pm2,我会在 stdout 中看到 pm2 列表。如果我从终端运行 pm2.js,我看不到。

我不明白为什么会发生这种情况,是否有解决方法

解决方法

你为什么要这样做?

PM2 是一个守护进程管理器,可帮助您管理和保持应用程序 24/7 全天候在线

请先检查 official document。 PM2 旨在管理长时间运行的任务,例如 Web 服务器。如果 Web 服务器因任何原因崩溃或退出,pm2 会干扰并再次唤醒它。这是默认行为。

您的 pm2.js 只是在很短的时间内(2 秒)运行然后退出。所以如果你用PM2启动它,它会一次又一次地启动......

没有理由在 PM2 中运行该脚本。如果您仍然需要,请使用 --no-autorestart 标志运行它。