代码之家  ›  专栏  ›  技术社区  ›  kee

气流:不知何故,下一次运行没有计划[复制]

  •  0
  • kee  · 技术社区  · 6 年前

    当我安排dag每天在特定时间运行时,dag根本不会执行。 但是,当我重新启动Airflow Web服务器和调度程序时,DAG将在该特定日期的计划时间执行一次,而不会从第二天开始执行。 我使用的是气流版本v1.7.1.3和python 2.7.6。 下面是DAG代码:

    from airflow import DAG
    from airflow.operators.bash_operator import BashOperator
    from datetime import datetime, timedelta
    
    import time
    n=time.strftime("%Y,%m,%d")
    v=datetime.strptime(n,"%Y,%m,%d")
    default_args = {
        'owner': 'airflow',
        'depends_on_past': True,
        'start_date': v,
        'email': ['airflow@airflow.com'],
        'email_on_failure': False,
        'email_on_retry': False,
        'retries': 1,
        'retry_delay': timedelta(minutes=10),
    
    }
    
    dag = DAG('dag_user_answer_attempts', default_args=default_args, schedule_interval='03 02 * * *')
    
    # t1, t2 and t3 are examples of tasks created by instantiating operators
    t1 = BashOperator(
        task_id='user_answer_attempts',
        bash_command='python /home/ubuntu/bigcrons/appengine-flask-skeleton-master/useranswerattemptsgen.py',
        dag=dag)
    

    我做错什么了吗?

    0 回复  |  直到 8 年前
        1
  •  14
  •   Community Vlad V    7 年前

    你的问题是 start_date 正在为当前时间设置。Airflow在 结束 间隔的,不是开始的。这意味着你的作业的第一次运行将在第一个间隔之后。

    例子:

    你做一个DAG,然后在午夜的气流中直播。今天(20xx-01-01 00:00:00)也是开始日期,但它是硬编码的( "start_date":datetime(20XX,1,1) )日程安排是每天的,就像你的一样( 3 2 * * * )

    此DAG第一次排队执行是20xx-01-02 02:03:00,因为这是在间隔期间 末端 . 如果你看到你的DAG正在运行,它应该有一个开始日期时间大约一天之后的日程日期。

    你可以通过 启动日期 硬编码到日期 通过确保动态日期比两次执行之间的时间间隔更远(在您的情况下,2天就足够了)。Airflow建议在需要重新运行作业或回填(或结束DAG)时使用静态开始日期。

    有关回填的详细信息(此常见StackOverflow问题的另一面),请查看文档或此问题: Airflow not scheduling Correctly Python

        2
  •  1
  •   kvb    8 年前

    根据时间表,你的DAG应该每天凌晨2:03运行。我怀疑开始日期可能会影响它。你能把它硬编码成“开始日期”:datetime.datetime(2016,11,01)然后再试一次吗?