每30秒在Heroku中运行一次任务

时间:2018-08-31 14:25:46

标签: node.js heroku

我希望在Heroku上运行的Nodejs应用程序每30秒运行一次任务。我将Heroku调度程序用于另一项任务,但这是因为它每天运行一次,并且Scheduler似乎可以正常运行,但是以此间隔运行不适合。

因此,我已经安装node-cron并设置了一项工作,该工作每天30am,每天上午11点至下午6点之间运行(我基本上是在调用api,然后更新数据库),我可以在本地运行node cron.js

cron.js

const cron = require('node-cron');
const task = require('./scripts/task');

cron.schedule('*/30 * 11-18 * * *', () => {
  console.log('Running Function');
  task.runFunction();
});

我不确定100%知道如何在Heroku上运行此操作,因为他们的docs指定了这种设置(在Procfile中配置):

web:    node web.js
worker: node worker.js
clock:  node clock.js

当前Procfile

web: node server.js

是否将我的cron.js更改为clock.js?然后在worker.js文件中包含内容? (尽管不确定什么)。

2 个答案:

答案 0 :(得分:2)

您可能应该将clock.js更改为cron.js,或者,如您所说,将cron.js重命名为clock.js。

web:    node web.js
worker: node worker.js
clock:  node cron.js

此外,我不确定您的cron.js是否设置正确。从node-cron的文档中,您可能需要以下内容:

const CronJob = require('../lib/cron.js').CronJob;

console.log('Before job instantiation');`
const job = new CronJob('*/30 * 11-18 * * *', () => {
  console.log('Running Function');
  task.runFunction();
});
console.log('After job instantiation');
job.start();

答案 1 :(得分:0)

如果您的worker: node worker.js中没有告诉他与该工作人员做某事,则不需要cron.js这行。 (我不知道runFunctions()会做什么)。如果您的应用程序仅是cron作业,则甚至不需要添加第一行。
因此,您只需拥有此配置文件即可:

clock: cron.js

如果需要,可以将clock更改为cron。这并不意味着:docs