Airflow:在Airflow中更改DAG的crontab时间

19

我有一个DAG,它每天都在3:00运行,过去几周它一直正常运转。

我现在把日期更新为7:00,但是显然过去两天它没有运行。我可以看到这两天的任务状态为“running”(绿色),但没有触发任何命令。

更改DAG的运行时间需要做其他事情吗?

我知道以前解决这个问题的方法之一是在元数据库中清除此DAG的任务并更新start_date,但我宁愿避免再次执行此操作。

有人有建议吗?

4个回答

17

要调度dag,Airflow只需查找最后一次执行日期并将计划间隔相加。如果该时间已过期,则会运行dag。您不能简单地更新开始日期。 一个简单的方法是编辑您的开始日期计划间隔,重命名您的dag(例如xxxx_v2.py)并重新部署它。


1
是否有关于重命名DAG以反映更新的元数据的更大讨论?如果有,可以请有人提供链接吗? - harveyxia
2
我找不到讨论,但在陷阱中提到了它 https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls - liferacer
2
常见陷阱页面已移动:https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=62694614 - SergiyKolesnikov
这里可以找到关于更改Airflow DAG的schedule_interval的GitHub讨论:https://github.com/apache/airflow/discussions/25304。 - Prabhatika Vij

6

除了重命名DAG外,另一种解决方案是编辑数据库中DAG的所有先前任务实例和DAG运行的execution_date。需要修改的表分别是task_instancedag_run

这种方法的一个缺点是你将失去通过Web服务器浏览已完成任务日志的能力。


2
嗯,但不重命名DAG的主要吸引力是保留日志,对吧? - MichaelChirico

3

大卫,

1. 您还可以通过实验性的REST API删除DAG。删除DAG

2. 更改所需的start_date

3. 然后再添加相同的DAG。


3

您可以使用相同的DAG。在修改schedule_interval后,您需要通过airflow backfill -m命令将先前的作业标记为成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接