如何解决Apache Airflow - 即使定义了 start_date 和 schedule_interval,Dag 也不会启动
我是 Airflow 的新手,但我定义了一个 Dag,每天早上 9 点发送一封基本的电子邮件。我的 DAG 如下:
from airflow import DAG
from datetime import datetime,timedelta
from airflow.operators.bash_operator import BashOperator
from airflow.operators.email_operator import EmailOperator
from airflow.utils.dates import days_ago
date_log = str(datetime.today())
my_email = ''
default_args = {
'owner': 'airflow','depends_on_past': False,'start_date': days_ago(0),'email': ['my_email'],'email_on_failure': True,'email_on_retry': False,'retries': 1,'retry_delay': timedelta(minutes=5),'concurrency': 1,'max_active_runs': 1
}
with DAG('TEST',default_args=default_args,schedule_interval='0 9 * * *',max_active_runs=1,catchup=False) as dag:
t_teste = EmailOperator(dag=dag,task_id='successful_notification',to='my_email',subject='Airflow Dag ' + date_log,html_content="""""")
t_teste
我已根据需要进行了所有配置,并且网络服务器和调度程序正在运行。另外,我的 Dag 在 UI 上处于活动状态。我的问题是我的 DAG 似乎什么都不做。它已经两天没有运行了,即使超过了预定时间,它也没有按预期运行。我已经手动测试并运行了我的触发器,它运行成功。但是如果我等待触发时间,它什么也不做。
你知道我做错了什么吗?
谢谢!
解决方法
您的 DAG 永远不会被安排。气流调度计算 state_date
+ schedule_interval
并在间隔结束时调度 DAG。
>>> import airflow
>>> from airflow.utils.dates import days_ago
>>> print(days_ago(0))
2021-06-26 00:00:00+00:00
计算 2021-06-26
(today) + schedule_interval
这意味着 DAG 将在 2021-06-27 09:00
上运行,但是当我们到达 2021-06-27
时,计算将产生 2021-06-28 09:00
和导致 DAG 从未真正运行。
结论是:永远不要在start_date
中使用动态值!
要解决您的问题,只需更改:
'start_date': days_ago(0)
到一些静态值,如:'start_date': datetime(2021,6,25)
请注意,如果您运行的是较旧版本的 Airflow,您可能还需要更改 dag_id
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。