[Heroku] [Node.js]如何在本地运行自定义时钟进程作业?

时间:2016-04-24 16:58:21

标签: node.js heroku cron

我正在尝试实现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。这似乎是因为工作进程立即退出,但这是否意味着我需要让它在端口上侦听?难道这不会破坏它是一个只在需要时活跃的旋转工人流程的目的吗?

1 个答案:

答案 0 :(得分:1)

只需使用node clock.js

运行它

你可以测试代码的各个部分(用index.js或bot.js替换clock.js),但不能一起运行它们。

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