Сбросить время выполнения DAG воздушного потока

В настоящее время у меня есть dag, который запланирован @daily и обычно должен срабатывать сразу после полуночи, чтобы работать с данными предыдущего дня.

Каким-то образом теперь он начал работать в 11:30 из-за того, что в прошлом были проблемы, и в то время он был перезапущен вручную. Теперь он всегда срабатывает в это время. Это, конечно, связано с тем, что алгоритм планирования запускает его через день после последнего времени выполнения.

Однако бегать в 11:30 утра совсем не хотелось. Я бы хотел как-нибудь запустить DAG в полночь.

Какие у меня варианты? Я всегда могу изменить имя, но есть ли способ легко написать сценарий, если / когда это произойдет в будущем?

Воздушный поток 1.8

Код DAG:

dag = DAG('my_dag_v5',
          catchup=False,
          default_args=args, 
          start_date=datetime.datetime(2018, 1, 30), 
          schedule_interval='@daily',
          max_active_runs=1)

person nimish    schedule 01.08.2018    source источник


Ответы (2)


изменить schedule_interval='@daily' на schedule_interval='0 0 * * *'

также измените дату начала с start_date=datetime.datetime(2018, 1, 30, 4, 0) на start_date=datetime(2018, 1, 30).

start_date (datetime) - Дата начала для задачи, определяет дату выполнения для первого экземпляра задачи. Лучше всего округлять start_date до schedule_interval вашей группы DAG.

schedule_interval- Определяет, как часто эта группа DAG запускается, этот объект timedelta добавляется к дате выполнения последнего экземпляра задачи для определения следующего расписания.

Это заставит его работать ежедневно в полночь в формате CRON.

person Zack    schedule 01.08.2018
comment
Согласно документы '@daily' и '0 0 * * *' идентичны. Не могли бы вы подробнее объяснить, как это изменит время срабатывания триггера, если последнее время выполнения было в 11:30? - person nimish; 01.08.2018
comment
Я изменил выражение cron на явное, и из-за алгоритм планирования работы по-прежнему запускаются только в 11:30. - person nimish; 01.08.2018
comment
@nimish, вы правы, что они должны быть идентичными (как указано в документации). Я считаю, что они не были идентичны тому, что не начиналось в полночь из-за того, что вы указали час и минуту в своем start_date. Просмотрите мой измененный ответ, поскольку я также изменил ваш start_date arg. Надеюсь, это исправит ваши проблемы. Пожалуйста, обратитесь к stackoverflow.com/questions / 36298756 / в качестве справочного материала. - person Zack; 01.08.2018
comment
О да. Я применил это изменение, однако на самом деле оно не начинается в полночь - оно начинается через 24 часа после последнего времени выполнения (1130) - изменение start_date не изменяет планировщик для текущего dag (и может вызвать странность, которая Я хочу избежать, но не обязательно, изменив имя DAG) - person nimish; 02.08.2018
comment
Я предполагаю, что этот ответ не касается того, что изменение start_date и scheduling_interval (с символического на строку cron) ничего не влияет на то, как планировщик запускает следующий DagRun, когда предыдущий DagRun был запланирован в нерабочее время. - person nimish; 02.08.2018

К сожалению, несмотря на все мои усилия по использованию других ответов, единственный последовательный способ, который я нашел, чтобы обеспечить поток воздуха для сброса времени выполнения без риска странности базы данных / планировщика, - это переименовать сам DAG.

Алгоритм планировщика вычислит следующее время выполнения, исходя из предыдущего времени выполнения + задержки планировщика.

Если это изменится, и другой ответ сработает, я приму это, поскольку это то, что я ожидал бы сработать, но не работает.

person nimish    schedule 06.08.2018