Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cron 如何在第一次取消暂停任务时停止运行该任务?_Cron_Airflow_Airflow Scheduler_Airflow Operator - Fatal编程技术网

Cron 如何在第一次取消暂停任务时停止运行该任务?

Cron 如何在第一次取消暂停任务时停止运行该任务?,cron,airflow,airflow-scheduler,airflow-operator,Cron,Airflow,Airflow Scheduler,Airflow Operator,我有一只狗。下面是一个参数示例 dag = DAG( 'My Dag', default_args=default_args, description='Cron Job : My Dag', schedule_interval='45 07 * * *', # start_date=days_ago(0), start_date = datetime(2021, 4, 6, 10, 45), tags=['My Dag Tag'],

我有一只狗。下面是一个参数示例

dag = DAG(
    'My Dag',
    default_args=default_args,
    description='Cron Job : My Dag',
    schedule_interval='45 07 * * *',
    # start_date=days_ago(0),
    start_date = datetime(2021, 4, 6, 10, 45),
    tags=['My Dag Tag'],
    concurrency = 1,
    is_paused_upon_creation=True,
    catchup=False # dont run previous and backfill; run only latest
)
阅读来自AIRFLOW的文档,我想我已经将dag设置为每天7:45运行。但是,如果我暂停dag并在几天后取消暂停,它仍然会在我取消暂停dag(当然是当天取消暂停)后立即运行,因为catch=False可以避免反作用。 这不是预期的行为,对吗? 我是说我安排在7:45。当我在10:00取消暂停时,它应该在接下来的7:45之前不会运行


我遗漏了什么?

我假设您熟悉气流的调度机制,如果不是这样,请在阅读其余答案之前阅读

至于你的情况: 部署dag时,您按预期运行了一次/多次。在某个时刻,您在
2021-04-07
上暂停了dag,今天(
2021-04-19
)您取消了暂停。然后,气流通过执行日期为2021-04-18'执行dag运行

这是意料之中的。

其原因是基于气流的调度机制。 您最近一次跑步是在
2021-04-07
上,间隔时间为
45 07***
(每天7:45)。由于您暂停了DAG运行
2021-04-082021-04-09,2021-04-17
从未创建。当您取消暂停时,DAG气流没有创建这些运行,因为
catchup=False
,但是今天运行(
2021-04-19
)不是catchup的一部分,因为执行时间间隔
\u 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')
一旦部署,将创建一次运行:


DAG
start\u date
2020-01-01
带有
catchup=False
我今天部署了DAG(
19/Apr/2021
),因此它创建了一个执行日期为2021-04-18'的运行,该运行今天开始运行
2021-04-19
,这是预期的。用你展示的例子来解释有点困难,因为你的例子不是真实的。您提供了昨天的开始日期,并声称dag已暂停几天。这没有道理。请添加一个真实的dag示例,其中包含关于执行了哪些运行以及您有问题的运行的信息,我将能够用您自己的示例向您解释。这个示例非常真实。提供的开始日期为2021年4月6日,不是昨天,而是晚了13天。由于信息保密,我只更改了DAG的名称。因为这是一个真实的例子,如果可以的话,请解释一下。请添加创建的运行的执行日期以及您暂停和取消暂停的确切时间上次运行是在2021年4月7日。从那时起,我就暂停了。当我今天取消暂停时(它运行了一次),我一取消暂停。这种行为是预期的吗?因为对于设置像dag这样的cron,我们通常希望它在取消暂停后按下一个计划运行。谢谢您的解释。非常感谢。然而,我现在的处境是,我宁愿让我的DAG每天按照相同的时间表运行,或者根本不运行。这种行为在某种程度上违背了直觉。理想情况下,人们会期望在给定的计划时间运行一些东西。有没有办法在气流中实现这种特性?这是在取消暂停DAG并继续运行下一个DAG时跳过此运行实例。@raaj如果希望取消暂停的DAG在4月19日开始运行,请在4月20日取消暂停。@raaj这是对气流行为的解释。您现在正在询问如何解决此问题。同样,这是一个理解调度机制的问题。如果您想解析2021-04-18的数据,那么在2021-04-19取消暂停dag。因此,基本上为了维护ETL逻辑,它被设置为具有不遵循指定cron的行为,这也是气流的一个非常重要的决定特征。例如,如果我想让一条管道在一天中的指定时间执行一个流程,或者干脆不执行(在任何其他时间),那么从其行为来看,它似乎不是一个合适的工具。因为它将立即运行至少一个我无法控制的实例的上一个积压工作。@raaj气流就是这样工作的。它将在未来发生变化,AIP-39和AIU间隔已被接受并正在进行中。