如何使节点调度在 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 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在heroku服务器中配置django-celery

如何使 PFQueryTableView 在 UIViewController 中工作

如何使 UISwipeGestureRecognizer 在 UIScrollView 中工作

如何使 event.srcElement 在 Firefox 中工作,这是啥意思?

如何使警报在 php 中工作

如何使 flex box 在 safari 中工作?