raa*_*aaj 6 cron airflow airflow-scheduler
我有一个DAG。这是参数示例。
\ndag = DAG(\n \'My Dag\',\n default_args=default_args,\n description=\'Cron Job : My Dag\',\n schedule_interval=\'45 07 * * *\',\n # start_date=days_ago(0),\n start_date = datetime(2021, 4, 6, 10, 45),\n tags=[\'My Dag Tag\'],\n concurrency = 1,\n is_paused_upon_creation=True,\n catchup=False # Don\xe2\x80\x99t run previous and backfill; run only latest\n)\nRun Code Online (Sandbox Code Playgroud)\n阅读 Apache Airflow 的文档,我想我已将 DAG 设置为每天 7:45 运行。但是,如果我暂停 DAG 并在几天后取消暂停,那么一旦我取消暂停(当然是当天),它仍然会运行,因为 catch=False 可以避免回填。
\n这不是预期的行为,对吧?
\n我的意思是,我安排在 7 点 45 分。当我在 10:00 取消暂停时,它应该在下一个 7:45 之前根本不会运行。
\n我在这里缺少什么?
\n我想你已经熟悉Airflow的调度机制了。如果不是这种情况,请先阅读Apache Airflow 中的开始日期和计划日期问题,然后再阅读答案的其余部分。
至于你的情况:
部署 DAG 时,您按预期运行了一次/多次。您在某个时刻暂停了 DAG 2021-04-07,今天 ( 2021-04-19) 您取消了它。然后 Airflow 使用 执行 DAG 运行execution_date='2021-04-18'。
这是预料之中的。
究其原因,是基于Airflow的调度机制。
您上次跑步的2021-04-07时间为45 07 * * *(每天 07:45)。2021-04-08, 2021-04-09, ... , 2021-04-17由于您暂停了 DAG,因此从未创建过运行。当您取消暂停 DAG 时,Airflow 不会创建这些运行,因为catchup=False,但是,今天的运行 ( 2021-04-19) 不是追赶的一部分。它被安排是因为间隔of execution_date=2021-04-18已达到其结束周期,因此开始运行。
您遇到的行为与部署这个新的 DAG 没有什么不同:
from airflow.operators.dummy_operator import DummyOperator
default_args = {
'owner': 'airflow',
'start_date': datetime(2020, 1, 1),
}
with DAG(dag_id='stackoverflow_question',
default_args=default_args,
schedule_interval='45 07 * * *',
catchup=False
) as dag:
DummyOperator(task_id='some_task')
Run Code Online (Sandbox Code Playgroud)
一旦部署它,就会创建一个运行:
DAGstart_date带有.2020-01-01 catchup=False我今天部署了 DAG ( 19/Apr/2021),因此它创建了一个执行日期 ='2021-04-18' 的运行,并于今天开始运行,2021-04-19。
| 归档时间: |
|
| 查看次数: |
5834 次 |
| 最近记录: |