2016-11-21 12 views
0

DAGを毎日特定の時刻に実行するようにスケジュールすると、DAGの実行はまったく行われません。 しかし、Airflow Webサーバーとスケジューラを再起動すると、DAGはその特定の日のスケジュールされた時刻に1回実行され、翌日以降は実行されません。 私はPython 2.7.6でAirflowバージョンv1.7.1.3を使用しています。ここ はDAGコードを行く:Apacheエアフロースケジューラはスケジュール時に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は毎日午前0時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 * * *)。

最初にこのダグが実行待ちになるのは、間隔期間が終了するであるため、20XX-01-02 02:03:00です。その時に実行しているダグを見ると、schedule_dateの後のおよそ1日の開始日時を持つはずです。

あなたが持っていることによってこの問題を解決することができますstart_dateハードコーディングされた動的な日付が(あなたのケースでは、2日にはたくさんのだろう)実行間隔よりも、過去にさらにあることを確認することで、日付またはに。ジョブの再実行やバックフィル(またはダグの終了)が必要な場合に備えて、静的な開始日を使用することをお勧めします。 (この共通stackoverflowの質問の反対側に)埋め戻しの詳細については

、ドキュメントまたはこの質問を確認してください。 Airflow not scheduling Correctly Python

関連する問題