PM2:在 Droplet 上使用 Cron 作业的 Node.js 应用程序 - 重新加载服务器和重复的 Cron 运行

问题描述 投票:0回答:1

我有一个 Node.js 应用程序在 Digital Ocean Droplet 中的节点 v16.15.0 上运行。该应用程序使用使用 node-cron v3.0.1 包的 cron 作业来处理重要的进程。

问题:每当我部署新代码时,我发现有必要使用命令 pm2 reload my-app 重新加载(正常重启)Node.js 服务器。不幸的是,此操作会导致我的活动 cron 进程终止。有没有办法在不中断正在运行的 cron 作业的情况下执行服务器重新加载?

为了提高性能,我增加了集群的数量。然而,这种调整导致了 cron 作业重复运行多次的问题。为此我实施了

process.env.NODE_APP_INSTANCE === 0

用于初始化 crons。

感谢您提供的任何见解和指导。

我尝试了前面概述的使用 pm2 优雅重启的建议方法,但不幸的是,它没有产生预期的结果。受服务器重新启动影响的 cron 作业的问题仍然存在。任何进一步的帮助将不胜感激。

node.js cron pm2 node-cron
1个回答
0
投票

我通过更改代码中的一些内容解决了这个问题,如下所示:

process.on("SIGTERM", () => gracefull());
process.on("SIGINT", () => gracefull());

/**
 * Handle graceful shutdown
 */
function gracefull() {
  console.log(
    "Received shutdown signal. Waiting for running jobs to complete..."
  );

  /* Set the flag to indicate shutdown */
  myCron.isShuttingDown = true; // This will indicate that now do not execute new tasks in the cron

  /* If no jobs are running, exit immediately */
  if (myCron.running) {
    myCron.on("cronDone", () => {
      console.log("The Cron complete signal received");
      process.exit(0);
    });
  } else {
    console.log("No running jobs. Exiting gracefully.");
    process.exit(0);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.