【发布时间】:2020-04-14 10:41:39
【问题描述】:
来自 cron 的气流新手,试图了解 execution_date 宏如何应用于调度系统以及何时手动触发。我已经阅读了常见问题解答,并设置了一个时间表,以按照我预期的方式执行,并填写正确的execution_date 宏。
我想在世界标准时间星期四上午 10 点每周运行我的每日任务。有时我会手动运行它。我的理解是 dag 的开始日期应该比我希望 dag 开始的实际日期晚一个时期。因此,为了今天在 2020 年 4 月 9 日执行 dag,使用 20020 年 4 月 9 日 execution_date 我设置了以下默认值:
default_args = {
'owner': 'airflow',
'start_date': dt.datetime(2020, 4, 2),
'concurrency': 4,
'retries': 0
}
而dag定义为:
with DAG('my_dag',
catchup=False,
default_args=default_args,
schedule_interval='0 10 * * 4',
max_active_runs=1,
concurrency=4,
) as dag:
opr_exc = BashOperator(task_id='execute_dag',bash_command='/path/to/script.sh --dt {{ ds_nodash }}')
虽然 dag 在今天 4 月 9 日准时执行,但它使用 20200402 而不是 20200409 的 ds_nodash 执行。我想我仍然很困惑,因为追赶已关闭,开始日期是一周前,因此我期待20200409。
现在,我找到了另一个答案here,它基本上解释了execution_date 处于周期的开始,并且总是落后一个周期。那么今后我应该使用next_ds_nodash 吗?这不会对手动触发的 dag 造成问题,因为 execution_date 在按需运行时会按预期工作。还是手动触发时next_ds_nodash 转换为ds_nodash?
问题:是否有一种快乐的媒介可以让我在计划运行和手动触发时正确地将execution_date 宏传递给我的每周运行 dag?这里的最佳做法是什么?
【问题讨论】: