我在Node.js应用程序中完成了集群。我在我的应用程序中有一个cron作业服务,当我将SRV_TYPE = cron环境变量传递给app.js时启动。问题是
我希望只有一个进程会执行我的cron作业。 这是代码shared on gist github
答案 0 :(得分:1)
有很多方法可以实现这一点。您可以为cron作业运行单独的实例。您只能在master上运行cron作业。
我刚刚为节点cronivo编写了一个小模块,它使用了后来的js和redis来允许cron作业只在集群或多进程中执行一次。只有第一个可用实例才能执行该作业。任何实例都可以执行作业,但只能执行一个。
答案 1 :(得分:0)
一种方式:
// In the master:
for (var i = 0; i < cpuCount; i += 1) {
cluster.fork({ RUN_CRON : process.env.SRV_TYPE === "cron" && i === 0 });
}
// In the worker:
if (process.env.RUN_CRON === 'true') {
...create the scheduler...
}
换句话说:您将环境变量RUN_CRON
传递给每个工作人员,如果true
设置为SRV_TYPE
,则它将包含字符串cron
它是分叉的第一个工作进程。