【问题标题】:Run a task every 30 seconds in Heroku在 Heroku 中每 30 秒运行一次任务
【发布时间】:2018-08-31 14:25:45
【问题描述】:

我希望在 Heroku 上运行的 Nodejs 应用程序每 30 秒运行一次任务。我将 Heroku 调度程序用于另一个任务,但那是因为它每天运行一次,而调度程序似乎很好,但是以这个间隔运行它不合适。

所以我已经安装了node-cron 并设置了一个作业,该作业将在每天上午 11 点到下午 6 点之间每 30 秒运行一次(我基本上是在调用一个 api,然后更新一个数据库),在本地我可以使用 @987654323 很好地运行它@

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

当前进程文件

web: node server.js

是否将我的 cron.js 更改为 clock.js ?然后在worker.js 文件中有一些东西? (虽然不确定是什么)。

【问题讨论】:

    标签: node.js heroku


    【解决方案1】:

    您可能应该将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();
    

    【讨论】:

    • 谢谢,我花了一段时间才得到它,但按要求工作,谢谢
    【解决方案2】:

    如果在你的cron.js 中你没有告诉他对这个工人做点什么,你就不需要这条线worker: node worker.js。 (我不知道runFunctions() 做什么)。如果您的应用程序只是 cron 作业,您甚至不需要添加第一行。
    所以你可以只拥有这个个人资料:

    clock: cron.js
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-30
      • 2012-03-26
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2021-12-18
      • 2018-03-21
      相关资源
      最近更新 更多