【问题标题】:Airflow schedule a task to run on the Monday before the 15th of the monthAirflow 安排一个任务在每月 15 号之前的星期一运行
【发布时间】:2022-01-26 03:37:42
【问题描述】:

是否可以将气流 DAG 安排在每个月 15 日之前的星期一的特定时间运行?我认为这个 cron 字符串可能会这样做,但我不确定我是否理解正确

0 10 8-14 * MON

所以我认为这应该只在每个月的 8 日和 14 日之间的星期一的 10:00 运行。由于 8 日和 14 日之间只能有一个星期一,因此每月只运行一次,并且应该是每月 15 日之前的星期一。

对吗?

【问题讨论】:

  • 您可以在这里查看时间表:crontab.guru
  • @tobi6 谢谢,我知道那个页面。但它只是用文字写出 cron 字符串,并没有验证这些文字是否符合我的预期逻辑。我只是想确认这将在每个月 15 日之前的星期一执行。是否有一些我错过的边缘情况,例如它在一个月内意外运行两次?

标签: cron airflow airflow-scheduler


【解决方案1】:

croniter 模块(Airflow 使用它来计算执行日期/时间)supports the hash symbol for the day-of-week field 可以让您安排,我相信会起作用的,每个月的第二个星期一。

例如,"30 7 * * 1#2" 表示在每个月的第二个星期一早上 7:30 运行。使用此代码进行测试:

from croniter import croniter 
from datetime import datetime 
cron = croniter("30 7 * * 1#2") 
for i in range(10):
    print(cron.get_next(datetime))

产量:

datetime.datetime(2018, 10, 8, 7, 30)
datetime.datetime(2018, 11, 12, 7, 30)
datetime.datetime(2018, 12, 10, 7, 30)
datetime.datetime(2019, 1, 14, 7, 30)
datetime.datetime(2019, 2, 11, 7, 30)
datetime.datetime(2019, 3, 11, 7, 30)
datetime.datetime(2019, 4, 8, 7, 30)
datetime.datetime(2019, 5, 13, 7, 30)
datetime.datetime(2019, 6, 10, 7, 30)
datetime.datetime(2019, 7, 8, 7, 30)

【讨论】:

  • 你是如何生成考试日期的?
  • from croniter import croniter from datetime import datetime cron = croniter("30 7 * * 1#2") print(cron.get_next(datetime)) # 重复
  • 谢谢,使用您的croniter 代码,我发现我的 cron 字符串在星期一的 8 号到 14 号 OR 之间,而不是我认为的那样在 AND 一个星期一。所以我会用#试试你的提示。
猜你喜欢
  • 2016-01-26
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 2020-05-14
相关资源
最近更新 更多