你怎么能把一个 cronjob 编程为在上午 12 点和中午 12 点之后只运行一次



我遇到了以下问题:

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

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

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

是否有可能实现一个 cronjob:

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

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

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

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

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

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

最新更新