首页 > 解决方案 > 使用 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.js在 PM2 中运行时,脚本一直在循环。我检查了进程的正常运行时间,似乎不仅client重新启动,而且pm2.js本身也重新启动,并且在 2 秒后再次,一次又一次......

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

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

标签: javascriptnode.jsapipm2

解决方案


您可以向您的服务发送 SIGKILL,然后 PM2 将再次启动它。

pm2.connect((err) => {
    pm2.sendSignalToProcessName('SIGKILL', name, (e, p) => {
        pm2.disconnect();
    });
});

推荐阅读