如何仅在一个实例上使用 node-schedule 运行 cron?
how to use node-schedule to run a cron only on one instance?
我的问题是如何使用 node-schedule 运行 仅在节点服务器的两个实例中的一个实例上执行 cron。
目前它在两个实例上都是 运行ning,但我希望它只在一个实例上执行。
那么如何让一个集群 运行 成为一个只有一次的任务呢?
提前致谢。
{
"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",
.......
.......
}
}
]
}
你应该使用环境变量。
在您的代码中,您将检查此环境变量:
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 官方文档的更多信息 here。
我的问题是如何使用 node-schedule 运行 仅在节点服务器的两个实例中的一个实例上执行 cron。 目前它在两个实例上都是 运行ning,但我希望它只在一个实例上执行。 那么如何让一个集群 运行 成为一个只有一次的任务呢? 提前致谢。
{
"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",
.......
.......
}
}
]
}
你应该使用环境变量。
在您的代码中,您将检查此环境变量:
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 官方文档的更多信息 here。