我正在尝试安排气流中的任务,但显然不是那么明显。
我要运行的任务非常简单,这是DAG配置:
from datetime import datetime
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.python_operator import PythonOperator
def print_hello():
return 'Hello world!'
dag = DAG('hello_world', description='Simple tutorial DAG',
schedule_interval='30 15 * * *',
start_date=datetime(2018, 10, 3), catchup=False)
dummy_operator = DummyOperator(task_id='dummy_task', retries=3,
dag=dag)
hello_operator = PythonOperator(task_id='hello_task',
python_callable=print_hello, dag=dag)
dummy_operator >> hello_operator
这意味着我想每天15:30运行它。例如,如果我今天打开此任务,它不会在15:30触发,但会在明天触发。这与执行间隔的左侧边界有关(这是Airflow的一个奇怪功能)。
所以问题是:
如何准确地在今天的15:30而不是明天在执行间隔结束时触发任务?
任何建议或澄清将不胜感激。
答案 0 :(得分:0)
我今天(2018-10-05T17:54:00 + 0)创建了完全相同的DAG脚本。 Airflow(v1.10)为2018-10-04T15:30:00 + 0创建了DAG运行(应在2018-10-05T15:30:00 + 0 [0]之后的某个时间执行)并立即启动(因为它已经在2018-10-05T15:30:00 + 0之后)。由于catchup=False
,它没有为2018-10-03T15:30:00 + 0创建DAG运行,它指示调度程序仅为DAG间隔系列[{{ 3}}]。
因此,今天(2018-10-05)运行的DAG运行是计划于2018-10-04T15:30:00 + 0运行的DAG运行,因为其计划间隔今天结束。
在您的情况下,您为什么看不到今天在Airflow Web UI中运行DAG(即2018-10-04T15:30:00 + 0的DAG)的原因可能是您首先设置了{{1 }}到今天,安排了DAG,然后尝试将start_date
更改为较早的一天。调度程序实际上创建了一个较早日期的DAG运行,但Web UI并未显示它。解决此问题的最简单方法是在更改start_date
或dag_id
[1]时更改hello_world_2
(例如,更改为start_date
等),然后重新启动调度程序。
答案 1 :(得分:0)
我想我明白了。
根据[1],atomic execution series
由Airflow创建。每个执行系列都有执行日期,表示执行间隔的开始。
因此,在我的情况下,执行日期(10-04T15:30:00 + 00:00)表示时间间隔从10月4日开始,并在10月5日同时结束( now ),正在执行今天的任务。