我正在尝试实现okut建议的基于自定义cron调度的heroku建议的自定义时钟进程模型,即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 local
或foreman start
在时钟和应用程序旁边运行工作进程时,我得到了所有进程的即时SIGTERM。似乎是因为工作进程正在立即退出,但这是否意味着我需要让它在端口上监听?这是否会破坏仅在需要时才激活的启动工作进程的目的? 最佳答案
只需使用node clock.js
运行
您可以测试代码的各个部分(用index.js或bot.js替换clock.js),但不能一起运行它们。
在运行clock.js之前,请确保将cronjob更改为每分钟执行一次或执行的操作