О.Ваш start_date
меняется с той же скоростью или быстрее, чем интервал расписания.
Вот что планировщик видит каждые несколько секунд:
start_date: 2018-12-11T12:12:12.000Z # E.G. IFF now is 2018-12-12T12:12:12.000Z, a day ago
schedule_interval: timedelta(days=1) # The default
Вот что нужно планировщику длягруппа обеспечения доступности баз данных: в последний раз запуск выполнялся более одного интервала времени назад.Если не было выполнено запланированного прогона, первый запланированный прогон мог бы начаться сейчас, если после start_date
прошел один полный интервал расписания, поскольку это самая ранняя допустимая дата для execution_date
.В этом случае dag_run
с execution_date
, установленным в начало этого интервала, должен быть создан.Затем можно создать task_instance
s для любых задач в группе обеспечения доступности баз данных, чьи зависимости выполняются, если task_instance
execution_date
находится после start_date
группы обеспечения доступности баз данных (это не сохраняется в объекте dag_run
, а перерассчитываетсязагружая файл DAG, просто проверяя состояние метки).
Таким образом, он не может быть запланирован автоматически по той причине, что дата начала продолжает меняться, так как интервал удовлетворен.Однако, если бы это было -2d, по крайней мере один запуск был бы запланирован, и тогда любые дальнейшие запуски должны были бы ждать, пока это не будет 1d после этого, чтобы быть запланированным.Однако проще, если вы просто установите фиксированное значение datetime
на вашем start_date
.
Но как насчет тех странных повторов в ваших ручных запусках ...
Вы запустили ручной запуск или два.Эти прогоны приняли текущее время как execution_date
, если вы не указали что-то еще.Это должно быть после start_date
, по крайней мере, до завтра, которое должно очистить их для запуска.Но затем в ваших журналах вы видите, что они терпят неудачу и помечаются для повторных попыток, а также не уменьшают ваши повторные попытки.Я не уверен, почему это так, но могло бы случиться так, что что-то не так с SSHOperator
.
Вы установили поток воздуха с дополнительным [ssh]
, чтобы встретились зависимости SSHOperator (особенно paramiko
и sshtunnel
) на веб-сервере и в планировщике?Один из них работает, потому что я предполагаю, что он анализируется и отображается в пользовательском интерфейсе в зависимости от того, был ли он добавлен в БД.
Что вы получите, если выполните:
airflow test my-dag-id run-script-an_instance_id 2018-12-12T12:12:12
Вы знаете, чтопланировщик и веб-сервер зацикливаются на пополнении пакета DAG и перезапускают этот файл DAG несколько раз в день, перезагружая этот json (это локальный доступ, очень похожий на импорт модуля), и воссоздают этот SSHHook
с поиском в БД,Я не вижу ничего необычного в настройке этого хука, почему бы просто не удалить ssh_hook
из SSHOperator
и заменить его на ssh_conn_id='my-conn-id'
, чтобы он мог быть создан один раз во время выполнения?Я сомневаюсь, что это проблема, которая вызывает повторные попытки, которые просто переносятся вперед.