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

标签 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 作业,而这部分我目前尚未成功开始工作。我从这个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 适用于所有进程。似乎是因为工作进程立即退出,但这是否意味着我需要让它监听端口?这难道不会违背它作为一个仅在需要时才激活的旋转工作进程的目的吗?

最佳答案

只需使用nodeclock.js运行它

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

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

关于node.js - [Heroku][Node.js] 如何在本地运行自定义时钟进程作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826178/

相关文章:

mysql日期时间范围选择

node.js - S3 预签名 URL 多内容配置 header

javascript - Meteor-Up 部署失败

javascript - 使用ajax从按钮获取属性到 Node

node.js - 1&1 找不到 Heroku 应用程序的 CNAME

heroku - 我可以将 Sailsjs 部署到 AppHarbor 或 Heroku 吗?

node.js - firebase-tools 无法通过 macOS 上的终端安装加载

ruby-on-rails - 处理完请求后杀死 puma 线程

django - 创建常规电子邮件

ruby-on-rails - Ruby on Rails - Rake 任务无法通过 Cron 工作