我在node.js中使用cron来安排一个在用户确定的时间发送文本消息的函数。它可以在我的本地服务器上运行,但是当我部署到heroku时,函数永远不会被调用。
答案 0 :(得分:1)
我正在使用带有节点的heroku上的cron作业。这是我的顶级东西
var CronJob = require('cron').CronJob;
var dailyJob = new CronJob({
cronTime: '0 0 0 * * *',
onTick: function () {
// Do daily function
console.log('I get called 1 time a day.');
},
start: false
});
dailyJob.start();
答案 1 :(得分:0)
在Heroku上,您可能需要使用Heroku Scheduler。
答案 2 :(得分:0)
我将详细阐述@rsp上面所说的内容,以便如果其他人发现这个问题,他们就会理解为什么在这里使用Heroku Scheduler是正确的答案。
当您在Heroku上运行软件时,会发生的事情是Heroku将接受您的项目,并在亚马逊上Heroku服务器集合中的随机dyno(服务器)上运行。
由于多种原因(包括帮助在大量Amazon服务器上均匀分配应用程序负载),Heroku会定期将您的dyno从一台Amazon服务器移动到另一台服务器。这种情况每天都会在幕后自动发生多次。
这意味着在Heroku上运行时,您的应用程序代码将会定期重新启动。
现在 - 从最终用户的角度来看,这不是一件坏事,因为当您的应用程序代码重新启动时,Heroku将排队传入的请求,然后只需在新应用程序成功重新启动后将它们发送到您的应用程序主办。所以对最终用户来说,这种行为是100%透明的。
但是,重要的是要知道,因为您的应用程序代码可能会随机重启,所以您不应该使用它来执行诸如运行需要一段时间才能完成的长任务,或者排队要在未来(cron模块的作用)。
相反:Heroku创建了一个免费的调度程序插件,您可以使用它基本上说“Hey Heroku,每分钟运行此节点脚本|等等。”
Heroku提供的调度程序插件将可靠地执行您的cron任务,因为Heroku会单独跟踪这些计时内容(在您的应用程序逻辑之外)。
希望这有帮助!