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