如何使节点调度在 Heroku 中工作?
Posted
技术标签:
【中文标题】如何使节点调度在 Heroku 中工作?【英文标题】:How to make node-schedule work in Heroku? 【发布时间】:2019-04-24 15:58:34 【问题描述】:我正在运行“节点计划”模块中的作业。
在 localhost 上一切正常,但是当我在 Heroku 中上传到生产环境时却不行。
我已在设置中更改了我的时区 -> var config 在 Asia/Jerusalem 的 TZ 但它仍然不起作用。 知道为什么吗?上传我的代码虽然我认为这是 Heroku 的东西,而不是代码。目前每分钟更新一次只是为了测试它,有用的是每 1.5 小时一次
const schedule = require("node-schedule");
const needle = require("needle");
let j = schedule.scheduleJob("* /1 * * * *", function()
needle.put("https://myserver.herokuapp.com/myendpoint");
);
【问题讨论】:
似乎调度器是一个附加组件:devcenter.heroku.com/articles/scheduler 顺便说一句,在 Heroku 上更改您的时区只是仪表板的视觉更改,我不相信它实际上反映在服务器上。 这不是 Heroku 的附加调度程序。它是 npm 上的一个节点包 我认为您必须检查节点包在何处/如何获取其信息。我猜来自服务器调度程序,当它不存在时.....编辑:我刚刚检查过 - 它使用 cron。 好的,如果使用 cron 应该可以正常工作吗? 【参考方案1】:我通过以下代码在 Heroku 和 Azure 上成功使用了 cron 作业。我正在使用cron
import CronJob from 'cron';
const doSomething = new CronJob(
'0 0 * * 1', //cron time
fnname, //replace with your function that you want to call
null, //oncomplete
false, //start flag
'America/Los_Angeles',// timezone
);
doSomething.start()
【讨论】:
Heroku 不需要设置时区。作业按计划运行,时区按照momentjs.com/timezone中定义的时区@ heroku 会关闭空闲节点,这是如何工作的? 它只关闭那些在免费层下运行的测功机。您可以使用正常运行时间机器人之类的服务间歇性地 ping 那些测功机,这将使它们保持清醒,但这会导致快速消耗 550 小时的免费测功机时间。 在尝试让node-schedule
工作无济于事后,我转向了这个解决方案。这就像一个魅力(第一次)。
@shmit 感谢您的解决方案,与 Heroku 配合得很好! (在 node-cron & node-schedule 失败后)以上是关于如何使节点调度在 Heroku 中工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何使 PFQueryTableView 在 UIViewController 中工作
如何使 UISwipeGestureRecognizer 在 UIScrollView 中工作