Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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
Python Apache中调度程序间隔和启动时间的工作不正确_Python_Python 3.x_Airflow_Airflow Scheduler - Fatal编程技术网

Python Apache中调度程序间隔和启动时间的工作不正确

Python Apache中调度程序间隔和启动时间的工作不正确,python,python-3.x,airflow,airflow-scheduler,Python,Python 3.x,Airflow,Airflow Scheduler,找不到具有任务开始时间的解决方案。我有代码,找不到哪里错了 当我跑完达格,25.03,26.03,27.03。任务已完成,但今天(28.03)的任务未在6:48开始 我曾尝试使用cron表达式,钟摆、日期时间和结果都是一样的。当地时间(UTC+3)和气流时间(UTC)不同。我尝试在“开始日期”或“计划间隔”中使用每个时间(本地、气流)-没有结果 使用:Ubuntu,Airflow v。1.9.0和当地执行人 emailname = Variable.get('test_mail') l_star

找不到具有任务开始时间的解决方案。我有代码,找不到哪里错了

当我跑完达格,25.03,26.03,27.03。任务已完成,但今天(28.03)的任务未在6:48开始

我曾尝试使用cron表达式,钟摆、日期时间和结果都是一样的。当地时间(UTC+3)和气流时间(UTC)不同。我尝试在“开始日期”或“计划间隔”中使用每个时间(本地、气流)-没有结果

使用:Ubuntu,Airflow v。1.9.0和当地执行人

emailname = Variable.get('test_mail')
l_start_date = datetime(2018, 3, 25, 6, 48) 
l_schedule_interval = '@daily'

WORKFLOW_DEFAULT_ARGS = {
    'owner': 'owner',
    'depends_on_past': True,
    'start_date': l_start_date,
    'email': emailname,
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retries_delay': timedelta(minutes=1),
}

# initialize the DAG
dag = DAG(
    dag_id='test_dag_mail',
    default_args=WORKFLOW_DEFAULT_ARGS,
    schedule_interval=l_schedule_interval,
    start_date=l_start_date,
 )

这是气流的一个特征:

请注意,如果您以一天的时间间隔运行DAG,则在2016-01-01T23:59之后不久将触发标有2016-01-01的运行。换句话说,一旦作业实例所覆盖的时间段结束,它就会启动

让我们重复一下:计划程序在开始日期之后的一个计划周期内,在周期结束时运行作业

From:

在解释执行日期设置为上一次运行和当前运行之间的时间段的开始时做得很差。为什么?嗯,假设一个每月、每天、每小时的作业需要读取从该时间到当前间隔时间的所有数据。是的,他们本可以把它换过来的

示例(将纳秒/毫秒切割为一位数):

对于最后一种情况,请注意,开始日期不是间隔中要求的星期二;由于开始时间可能与间隔时间不一致这一点令人困惑,因此我没有对此进行准确的测试,并建议如果你想每周二跑步,那么你的开始时间应该在2017-12-05或2017-11-28这样的周二

2017-12年度的参考资料:

#  December 2017
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
因此,在DAG的任务中,使用所提供的运行上下文中的jinja2模板,使用
{{ds}
{execution\u date}
将引用示例的最后一列,而不是
datetime.now()
将告诉您关于倒数第二列的内容

提供这些参数是为了使任务可以是幂等的:f(data)=f(f(data))


如果运行DAG一次,最终状态应与运行DAG N次相同。这样,如果运行(线性)DAG,5个任务中的3个任务成功,但任务4失败,任务5从未运行,则可以重新运行整个DAG,任务1-3将预清理或覆盖数据,以便输出不会与这些任务之前的成功结果相比发生变化,然后,任务4和5有望成功,您将处于最后的良好状态。

谢谢您的回答。如果你是说dag每天午夜都会开始,我理解。我怎样才能为每一天或每一个月设定具体的时间呢?@他根本不是这个意思。今天28号的跑步是你看到的已经跑过的,并且被标记为27号。检查该运行的第一个任务,并查看该任务的“开始时间”。Cron表达式非常简单。对于一项日常任务,你从一个月的哪一天开始,从一年的哪一天开始,从一周的哪一天开始。因此:
2018***
每天以18小时20米UTC运行。2018-03-28的执行时间为2018-03-27T18:20:00Z。启动时间将在2018-03-28T18:20:00Z之后,具体取决于计划程序将其发送给工作程序和工作程序启动它所需的时间。
#  December 2017
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31