运行 每两周和每天任务的条件 Cron 作业表达式

Conditional Cron job expression for running task fortnightly and daily

我需要 运行 2 个任务满足以下条件

  1. 第一个任务将 运行 每隔一个星期四凌晨 3 点
  2. 第二个任务将 运行 每天中午 12 点,除了第一个任务 运行。

我是 cron 作业表达式的新手,但尝试了几种方法。我正在使用 Spark、Scala 来创建任务并使用 Airflow 来安排任务。

schedule_interval= '0 0 3 1-5,15-19,29-31 * THU'

我已经在 Airflow 中尝试了第一个任务的上述表达式,但如果交替星期四将在 6-14、20-28 发生,它将失败例如,在 2022 年 1 月,星期四将在 6 日、13 日、20 日和 27 日到来。 另一个问题会出现,例如,如果交替星期四在 29-31 之间,下星期四在 1-5 之间,工作将连续 2 个星期四 运行。

我使用下面提到的一段代码解决了上述用例

def is_alternate_thursday(starting_day, date_to_check):
    set_day = THURSDAY

    if (date_to_check < starting_day) or (date_to_check.weekday() != set_day):
        return False

    base_week = starting_day.isocalendar()[1]
    checked_week = date_to_check.isocalendar()[1]

    return (checked_week - base_week) % 2 == 0

现在我们可以根据标志运行任务。