微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Apache Airflow - 即使定义了 start_date 和 schedule_interval,Dag 也不会启动

如何解决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 并在间隔结束时调度 D​​AG。

>>> 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 举报,一经查实,本站将立刻删除。