2016-11-21 84 views
0

當我安排DAG每天在特定時間運行時,DAG執行完全不會發生。 但是,當我重新啓動Airflow Web服務器和調度程序時,DAG將在該特定日期的預定時間執行一次,並且不會在第二天起執行。 我使用Airflow版本v1.7.1.3與Python 2.7.6。 這裏去的DAG代碼:Apache Airflow調度程序在計劃時間不會觸發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': ['[email protected]'], 
    '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

按照您的DAG每天上午02:03運行的日程安排。我的懷疑是start_date可能會影響它。你可以將它硬編碼爲'start_date':datetime.datetime(2016,11,01)並嘗試。

4

你的問題是start_date被設置爲當前時間。氣流運行的作業在結束的間隔,而不是開始。這意味着你的工作的第一輪將在第一個時間間隔之後。

例子:

你讓一個DAG並把它活在空氣氣流午夜。今天(20XX-01-01 00:00:00)也是start_date,但它是硬編碼的("start_date":datetime(20XX,1,1))。日程安排的時間間隔是每天,像你的(3 2 * * *)。

這個DAG第一次排隊等候執行是20XX-01-02 02:03:00,因爲那是當間隔期間結束時。如果你看看當時正在運行的dag,它應該在schedule_date後大約一天有一個開始的日期時間。

你可以有解決這個問題的start_date硬編碼通過確保動態日期進一步是過去比執行之間的時間間隔(在你的情況,2天將會有大量的)一個日期。 Airflow建議您使用靜態start_dates,以防需要重新運行作業或回填(或結束dag)。

有關回填(此共同問題計算器的相反側)的詳細信息,檢查文檔或這樣的問題: Airflow not scheduling Correctly Python

相關問題