【问题标题】:[Heroku][Node.js] How to locally run custom clock process jobs?[Heroku][Node.js] 如何在本地运行自定义时钟进程作业?
【发布时间】:2016-08-17 23:51:56
【问题描述】:

我正在尝试实现 heroku 建议的自定义时钟进程模型,用于基于自定义的 cron 调度,发现 here

我的 Procfile 与链接中建议的相同:

web: node index.js
worker: node bot.js
clock: node clock.js

我的应用程序位于index.js,我可以使用heroku local web 成功运行它,并通过http://localhost:5000 查看我的内容。但是,问题是,我的应用程序上的某些操作会导致安排一个 cron-job,而这部分是我目前没有成功开始工作的部分。我从这个tutorial 启发了这段代码。

我的clock.js 文件如下所示:

var CronJob = require('cron').CronJob;
var bot = require('./bot.js');

function setupJob(cronTimeFormatString) {
    new CronJob({
    cronTime: cronTimeFormatString,
    onTick: bot.setupJob(),
    start: true,
    timeZone: "America/Los_Angeles"
  });
}

目标是从我的应用程序中以如下方式调用它:

 var clock = require('./clock.js');
 clock.setupJob('00 00 11 * * 1-5'); // this is a job that runs on weekdays at 11am

目前,bot.js 看起来像:

module.exports = {
  setupJob: function() { /* do stuff */
    console.log("start background job");
  }
};

第一个问题是所有这些都需要吗?我的最终目标只是设置一个将运行用户定义次数的 cron 作业,但从我的探索来看,Heroku Scheduler 的功能不足以满足我的需求。

不过,实际的问题是,当我尝试使用 heroku localforeman start 与时钟和应用程序一起运行工作进程时,我会立即获得所有进程的 SIGTERM。似乎是因为工作进程立即退出,但这是否意味着我需要让它在端口上侦听?这不会破坏它作为一个仅在需要时才激活的旋转工作进程的目的吗?

【问题讨论】:

    标签: node.js heroku cron


    【解决方案1】:

    只需使用node clock.js 运行它

    您可以测试单独的代码片段(将clock.js 替换为index.js 或bot.js),但不能一起运行它们。

    确保在运行 clock.js 之前将 cronjob 更改为每分钟执行一次或您喜欢的任何内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 2019-08-05
      • 2022-09-30
      • 1970-01-01
      • 2012-07-15
      相关资源
      最近更新 更多