【问题标题】:Allocate One Process for CRON job node.js为 CRON 作业 node.js 分配一个进程
【发布时间】:2016-08-08 10:25:02
【问题描述】:

我已经在我的 Node.js 应用程序中完成了集群。我的应用程序中有一个 cron 作业服务,它在我将 SRV_TYPE=cron 环境变量传递给 app.js 时启动。问题是

我希望只有一个进程会执行我的 cron 作业。 这是代码shared on gist github

【问题讨论】:

  • 如果你运行一个完全独立的应用程序(比如说 cron )来负责处理 Cron 作业怎么样。这样你就可以分离关注点。如果您需要将消息/任务从主应用程序传递到 cron 应用程序,那么您可以使用 Rabbitmq 进行消息传递系统。

标签: node.js cron


【解决方案1】:

有很多方法可以实现这一点。您可以为 cron 作业运行单独的实例。您只能在 master 上运行 cron 作业。

我刚刚为节点写了一个小模块cronivo,它使用了laterJs和redis来允许一个cron作业即使在集群或多进程中也只能执行一次。只有第一个可用实例将执行该作业。任何实例都可以执行作业,但只有一个。

【讨论】:

    【解决方案2】:

    一种方式:

    // 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 传递给每个worker,如果SRV_TYPE 设置为cron,它将包含字符串true 并且它是第一个worker被分叉的进程。

    【讨论】:

    • 我没发现问题? Worker 1 没有记录 "App is Starting on ..." 消息,因此这将是运行 cron 部分的消息。
    猜你喜欢
    • 2021-11-30
    • 2016-10-06
    • 2019-05-10
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多