Airflow DAG cli和catchup

Airflow DAG cli和catchup,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我有DAG: dag = DAG( dag_id='example_bash_operator', default_args=args, schedule_interval='0 0 * * *', start_date=days_ago(2), dagrun_timeout=timedelta(minutes=60), tags=['example'] ) dag.cli()的意义是什么? cli()扮演什么角色 今天是10月14日。当我添加c

我有DAG:

dag = DAG(
    dag_id='example_bash_operator',
    default_args=args,
    schedule_interval='0 0 * * *',
    start_date=days_ago(2),
    dagrun_timeout=timedelta(minutes=60),
    tags=['example']
)
dag.cli()的意义是什么? cli()扮演什么角色

今天是10月14日。当我添加catchup false时,它将在10月13日执行。它不应该只在14日执行。如果没有它,它将执行12和13,这和回填一样有意义。但由于catchup false,它为什么会在10月13日执行

dag = DAG(
    dag_id='example_bash_operator',
    default_args=args,
    schedule_interval='0 0 * * *',
    start_date=days_ago(2),
    catchup=False,
    dagrun_timeout=timedelta(minutes=60),
    tags=['example']
)

应避免将
start\u date
设置为相对值-这可能会导致意外行为,因为每次解析DAG文件时都会新解释此值

以下文件中有一个很长的描述:

我们建议不要使用动态值作为开始日期,尤其是datetime.now(),因为它可能会很混乱。该任务在周期结束时触发,理论上,@hourly DAG不会在now()移动时到达一小时后

关于
dag.cli()
,我将删除整个部分-dag绝对不要求由airflow scheduler执行,请参阅

关于
catchup=False
以及为什么它会在10月13日执行,请查看

计划程序在其覆盖的时间段结束之前不会触发您的任务,例如,一天结束后,计划时间间隔设置为@daily runs的作业。该技术确保在执行dag之前,该期间所需的任何数据都是完全可用的。在用户界面中,看起来好像气流延迟了一天运行任务

注意 如果以一天的计划间隔运行DAG,则执行日期为2019-11-21的运行将在2019-11-21T23:59后立即触发。 让我们重复一下,调度程序在开始日期之后的一个调度时间间隔,即周期结束时运行作业


另外,这篇文章可能值得一读。

您应该避免将
开始日期设置为相对值-这可能会导致意外行为,因为每次解析DAG文件时都会新解释此值

以下文件中有一个很长的描述:

我们建议不要使用动态值作为开始日期,尤其是datetime.now(),因为它可能会很混乱。该任务在周期结束时触发,理论上,@hourly DAG不会在now()移动时到达一小时后

关于
dag.cli()
,我将删除整个部分-dag绝对不要求由airflow scheduler执行,请参阅

关于
catchup=False
以及为什么它会在10月13日执行,请查看

计划程序在其覆盖的时间段结束之前不会触发您的任务,例如,一天结束后,计划时间间隔设置为@daily runs的作业。该技术确保在执行dag之前,该期间所需的任何数据都是完全可用的。在用户界面中,看起来好像气流延迟了一天运行任务

注意 如果以一天的计划间隔运行DAG,则执行日期为2019-11-21的运行将在2019-11-21T23:59后立即触发。 让我们重复一下,调度程序在开始日期之后的一个调度时间间隔,即周期结束时运行作业


另外,这篇文章可能值得一读。

Airflow中显示的执行日期与直觉相反,因为它显示了在间隔时间过去后它现在执行的实例的计划日期。此外,它还显示UTC时间。例如,目前在欧洲的CEST(中欧夏季时间)下,我们的执行“发生”在22:00,而不是计划的00:00。气流中显示的执行日期与直觉相反,因为它显示了间隔过后现在执行的实例的计划日期。此外,它还显示UTC时间。例如,目前在欧洲,根据CEST(中欧夏季时间),我们的处决“发生”在22:00,而不是预定的00:00。
dag = DAG(
    dag_id='example_bash_operator',
    default_args=args,
    schedule_interval='0 0 * * *',
    start_date=days_ago(2),
    catchup=False,
    dagrun_timeout=timedelta(minutes=60),
    tags=['example']
)