#cron #airflow-scheduler
Вопрос:
Мне нужно выполнить 2 задачи при следующих условиях
- 1-е задание будет выполняться каждый альтернативный четверг в 3 часа ночи
- 2-е задание будет выполняться каждый день в 12 часов утра, за исключением дней, когда будет выполняться 1-е задание.
Я новичок в выражениях заданий cron, но пробовал несколько подходов. Я использую Spark, Scala для создания задач и Airflow для планирования задачи.
schedule_interval= '0 0 3 1-5,15-19,29-31 * THU'
Я попробовал приведенное выше выражение для первой задачи в Airflow, но оно не сработает, если альтернативный четверг произойдет 6-14, 20-28, например, в январе 2022 года Четверги будут 6, 13, 20 и 27 числа.
Другая проблема возникнет, например, если альтернативный четверг наступит между 29-31, а следующий четверг наступит между 1-5, работа будет выполняться в течение 2 последовательных четвергов.
Ответ №1:
Я решил вышеуказанный вариант использования, используя приведенный ниже фрагмент кода
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
Основываясь на флаге, теперь мы можем запустить задачу.