如何编程cronjob在12点和12点之后仅运行ONCE

时间:2018-05-23 04:16:01

标签: algorithm datetime time cron

我遇到了以下问题:

  1. 有两个班次。一班从早上12点开始,另一班在晚上12点开始。
  2. 在每个班次开始时,生成一些任务(细节不重要)。
  3. 通常,这是一个可以用crontab解决的微不足道的问题。但是,我的公司在Heroku上运行, Heroku Scheduler 具有以下有趣的属性:

    1. 每隔10分钟,每小时或每天运行
    2. 您无法确定调度程序何时实际启动。如果您的调度程序每10分钟运行一次,那么您可以预期它将在凌晨4:00到凌晨4:10之间运行。
    3. 调度程序可能遇到一些错误并崩溃。发生这种情况时,调度程序将立即重新启动。例如,如果调度程序在运行时在4:00崩溃,它可能会在4:01再次运行。
    4. 是否可以实现一个cronjob:

      1. 仅在上午12点和下午12点后执行一次
      2. 无需数据库来跟踪其执行时间?

1 个答案:

答案 0 :(得分:0)

我可以想到这样做的一种方法是在早上12点和中午12点运行一个脚本的cron服务器(不在Heroku上)。 cron调用的脚本可以使用Heroku Platform API来启动Heroku应用程序中的one-off dyno(使用Dyno Create端点)。

此方法满足您在上午12点和下午12点仅执行一次的要求,而不使用数据库来跟踪执行时间。

这种方法的缺点是它不是一个“纯Heroku”解决方案,并且需要你维护一些“外部”服务器来触发你的cron作业。

如果您不喜欢维护自己的cron服务器的想法,可以使用一些云解决方案来安排脚本。例如,我想你可以使用AWS Lambda with Scheduled Events免费执行此操作。 在这种情况下,你会安排你的lambda函数在每天上午12点和中午12点运行,你的lambda函数会将你的Heroku旋转一下dyno。

当然,如果您愿意在Heroku应用程序中添加某种形式的数据库,您可以轻松创建“纯Heroku”解决方案。