2016-11-21 10 views
0

Когда я планирую запуск DAG в определенное время каждый день, выполнение DAG вообще не выполняется. Однако, когда я перезапускаю веб-сервер Airflow и планировщик, группы 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 на текущее время. Airflow запускает задания на конец интервала, а не начало. Это означает, что первый запуск вашей работы будет после первого интервала.

Пример:

Вы делаете даг и положить его в прямом эфире Airflow в полночь. Сегодня (20XX-01-01 00:00:00) также является start_date, но он жестко закодирован ("start_date":datetime(20XX,1,1)). Интервал расписания - ежедневно, как и ваш (3 2 * * *).

Первый раз, когда этот dag будет поставлен в очередь на выполнение 20XX-01-02 02:03:00, потому что это когда период интервала заканчивается. Если вы посмотрите на то, что ваш даг запущен в это время, он должен иметь начатое время и время примерно на один день после расписания.

Вы можете решить эту проблему, имея ваш start_date жестко закодированы на дату или, убедившись, что динамическая дата дальше в прошлое, чем интервал между казнями (в вашем случае, 2 дня будет много). Airflow рекомендует использовать статические start_dates в случае необходимости повторного запуска заданий или засыпки (или завершения dag).

Для получения дополнительной информации о засыпке (противоположная сторона этого общего вопроса StackOverflow), проверить документы или на этот вопрос: Airflow not scheduling Correctly Python