我有一些失败的DAG,让我们说从2月1日到2月20日。从那个日期开始,所有这些都成功了。
我尝试使用cli(而不是使用Web UI执行二十次):
airflow clear -f -t * my_dags.my_dag_id
但我有一个奇怪的错误:
airflow: error: unrecognized arguments: airflow-webserver.pid airflow.cfg airflow_variables.json my_dags.my_dag_id
编辑1:
就像@ tobi6解释的那样,*
确实引起了麻烦。
知道了,我尝试了这个命令:
airflow clear -u -d -f -t ".*" my_dags.my_dag_id
但它只返回失败的任务实例(-f
标志)。 -d
和-u
标志似乎不起作用,因为忽略(未返回)失败的下游和上游的任务实例。
编辑2:
与@ tobi6建议类似,使用-s
和-e
许可选择日期范围内的所有DAG运行。这是命令:
airflow clear -s "2018-04-01 00:00:00" -e "2018-04-01 00:00:00" my_dags.my_dag_id.
但是,在上面的命令中添加-f
标志只会返回失败的任务实例。是否可以在日期范围内选择所有失败的DAG运行的所有失败任务实例?
答案 0 :(得分:2)
如果您在Linux bash中使用asterik *
,它将自动扩展目录的内容。
这意味着它将使用当前工作目录中的所有文件替换asterik,然后然后执行您的命令。
这有助于避免自动扩展:
"airflow clear -f -t * my_dags.my_dag_id"
答案 1 :(得分:0)
到目前为止,我发现的一种解决方案是执行sql(在我的情况下为MySQL):
update task_instance t left join dag_run d on d.dag_id = t.dag_id and d.execution_date = t.execution_date
set t.state=null,
d.state='running'
where t.dag_id = '<your_dag_id'
and t.execution_date > '2020-08-07 23:00:00'
and d.state='failed';
它将清除失败的dag_run上的所有任务状态,因为在Web UI中为整个dag运行按下了“清除”按钮。