计划只在一个实例上运行cron?

我的问题是如何使用node-schedule只在节点服务器的两个实例中的一个实例上运行cron。 目前它在两个实例上运行,但我希望它只在一个实例上执行。 那么如何让群集只运行一次任务? 提前致谢。

{
  "apps": [
    {
      "name": "Example",
      "script": "boot/app/app.js",
      "watch": false,
      "exec_mode": "cluster_mode",
      "instances": 2,
      "merge_logs": true,
      "cwd": "/srv/www.example.com/server",
      "env": {
        "NODE_ENV": "development",
        .......
    .......
      }
    }
  ]
}

你应该使用环境变量。

在你的代码中你会检查这个env var:

if(process.env.WITH_SCHEDULE) {
    ...
}

当你启动你的实例时,你将只为一个实例设置WITH_SCHEDULE。

例子pm2.json:

{
  "apps": [
    {
      "name": "Example",
      "script": "boot/app/app.js",
      "args": [],
      "error_file": "/srv/www.example.com/logs/error.log",
      "out_file": "/srv/www.example.com/logs/info.log",
      "ignore_watch": [
        "node_modules"
      ],
      "watch": false,
      "cwd": "/srv/www.example.com/server",
      "env": {
        "NODE_ENV": "production",
        "WITH_SCHEDULE": "1",
        "HOST": "127.0.0.1",
        "PORT": "9030"
      }
    },
    {
      "name": "Example",
      "script": "boot/app/app.js",
      "args": [],
      "error_file": "/srv/www.example.com/logs/error.log",
      "out_file": "/srv/www.example.com/logs/info.log",
      "ignore_watch": [
        "node_modules"
      ],
      "watch": false,
      "cwd": "/srv/www.example.com/server",
      "env": {
        "NODE_ENV": "production",
        "HOST": "127.0.0.1",
        "PORT": "9030"
      }
    }
  ]
}

您可以使用PM2本身提供的一个环境变量,名为NODE_APP_INSTANCE ,它需要PM2 2.5。

NODE_APP_INSTANCE环境变量用于确定进程之间的区别,例如,您可能希望仅在一个进程上运行cronjob,则可以只检查process.env.NODE_APP_INSTANCE === 0,因为两个进程永远不会有相同的编号。

更多关于PM2官方文档的信息。

链接地址: http://www.djcxy.com/p/37033.html

上一篇: schedule to run a cron only on one instance?

下一篇: .NETPlatform vs .NETStandard