首页 > 解决方案 > 您如何将 cronjob 编程为仅在上午 12 点和下午 12 点之后运行一次

问题描述

我遇到以下问题:

  1. 有两个班次。一个班次从上午 12 点开始,另一个班次在下午 12 点开始。
  2. 在每个班次开始时,生成一些任务(细节不重要)。

通常,这是一个可以用 crontab 解决的小问题。但是,我的公司在 Heroku 上运行,Heroku 调度程序具有以下有趣的属性:

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

是否可以实现一个 cronjob:

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

标签: algorithmdatetimetimecron

解决方案


我能想到的一种方法是让一些 cron 服务器(不在 Heroku 上)在上午 12 点和下午 12 点运行脚本。cron 调用的脚本可以使用Heroku 平台 API在 Heroku 应用程序中启动一次性 dyno(使用Dyno Create端点)。

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

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

如果您不喜欢为此维护自己的 cron 服务器的想法,您可以使用一些云解决方案来安排您的脚本。例如,我想您可以使用带有 Scheduled Events 的 AWS Lambda免费执行此操作。在这种情况下,您将安排您的 lambda 函数在每天上午 12 点和下午 12 点运行,并且您的 lambda 函数将启动您的 Heroku 一次性测功机。

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


推荐阅读