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

Apache Airflow - Dag doesn't start even with start_date and schedule_interval defined

我是 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

我已完成所需的所有配置,并且我有网络服务器和调度程序 运行ning。此外,我的 Dag 在 UI 上处于活动状态。我的问题是我的 DAG 似乎什么也没做。已经两天没运行了,就算过了预定的时间也没有运行。我已经手动测试并 运行 我的触发器,它 运行 成功。但是如果我等待触发时间,它什么都不做。

你知道我做错了什么吗?

谢谢!

您的 DAG 永远不会被安排。 Airflow 计划计算 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(今天)+ schedule_interval 这意味着 DAG 将在 2021-06-27 09:00 运行 但是当我们达到 2021-06-27 时,计算将产生2021-06-28 09:00 等等导致 DAG 实际上从未 运行s.

结论是:永远不要在 start_date!

中使用动态值

要解决您的问题,只需更改:

'start_date': days_ago(0) 到一些静态值,例如:'start_date': datetime(2021,6,25) 请注意,如果您使用的是 运行 旧版本的 Airflow,您可能还需要更改 dag_id.