【发布时间】:2020-08-22 13:10:12
【问题描述】:
我使用 PM2 来控制和管理 node.js 进程。使用 PM2,我可以同时运行应用程序的多个实例。问题是,如果您只需要执行一次特定代码(任务),则该代码将在每个实例中相应地执行。我想知道我是否可以将某个代码的执行限制为 1 个实例?有没有办法做到这一点?谢谢!
【问题讨论】:
我使用 PM2 来控制和管理 node.js 进程。使用 PM2,我可以同时运行应用程序的多个实例。问题是,如果您只需要执行一次特定代码(任务),则该代码将在每个实例中相应地执行。我想知道我是否可以将某个代码的执行限制为 1 个实例?有没有办法做到这一点?谢谢!
【问题讨论】:
您可以使用 NODE_APP_INSTANCE 环境变量来执行此操作:https://pm2.keymetrics.io/docs/usage/environment/#node_app_instance-pm2-25-minimum
然后在您的 NodeJS 脚本中,您可以进行以下检查:
// Run script only on first PM2 instance
if (process.env.NODE_APP_INSTANCE === '0') {
foo();
}
问候
【讨论】:
恐怕用 pm2 开箱即用是不可能做到这一点的。您需要实现某种信号量来跟踪正在运行的实例计数。或者从主脚本中获取您需要运行一次的部分代码并使用调度程序运行它。
【讨论】:
您的问题本来可以更清晰和更具描述性。有点混乱。
不过,您可以参考this cheatsheet 了解最常用的pm2 命令。也许它对您正在搜索的内容有直接的答案。
【讨论】: