2016-03-30 2 views
1

Я хочу попытаться использовать Airflow вместо Cron. Но sched_interval не работает так, как я ожидал.Как правильно работать с расходом воздуха sched_interval

Я написал код python, как показано ниже.
И в моем понимании, Airflow должен был бежать на «2016/03/30 8:15:00», но в то время это не сработало.

Если я сменил его так: «schedule_interval»: timedelta (minutes = 5) », он работал правильно, я думаю.

«notice_slack.sh» - это просто позвонить slack api на мои каналы.

# -*- coding: utf-8 -*- 
from __future__ import absolute_import, unicode_literals 
import os 
from airflow.operators import BashOperator 
from airflow.models import DAG 
from datetime import datetime, timedelta 

args = { 
    'owner': 'airflow', 
    'depends_on_past': False, 
    'start_date': datetime(2016, 3, 29, 8, 15), 
} 

dag = DAG(
    dag_id='notice_slack', 
    default_args=args, 
    schedule_interval="@daily", 
    dagrun_timeout=timedelta(minutes=1)) 

# cmd file name 
CMD = '/tmp/notice_slack.sh' 

run_this = BashOperator(
    task_id='run_transport', bash_command=CMD, dag=dag) 

Я хочу, чтобы некоторые из моих сценариев выполнялись каждый день в определенное время, как этот параметр cron.

15 08 * * * bash /tmp/notice_slack.sh 

Я прочитал документ Scheduling & Triggers, и я знаю, что это немного отличается хрон.
Итак, я пытаюсь выполнить настройки «start_date» и «schedule_interval».

Кто-нибудь знает, что мне делать?

воздуха версия

INFO - Использование исполнителя LocalExecutor

v1.7.0

амазонка-линукс-AMI/2015,09-релиз струнах

ответ

4

Попробуйте это:

# -*- coding: utf-8 -*- 
from __future__ import absolute_import, unicode_literals 
import os 
from airflow.operators import BashOperator 
from airflow.models import DAG 
from datetime import datetime, timedelta 

args = { 
    'owner': 'airflow', 
    'depends_on_past': False, 
    'start_date': datetime(2016, 3, 29), 
} 

dag = DAG(
    dag_id='notice_slack', 
    default_args=args, 
    schedule_interval="15 08 * * *", 
    dagrun_timeout=timedelta(minutes=1)) 

# cmd file name 
CMD = 'bash /tmp/notice_slack.sh' 

run_this = BashOperator(
    task_id='run_transport', bash_command=CMD, dag=dag) 

start_date (datetime) - Задача start_date для задачи определяет экземпляр execute_date для первого экземпляра задачи. Лучшая практика заключается в том, чтобы start_date округлялся до вашего графика_направления DAG.

schedule_interval (datetime.timedelta или dateutil.relativedelta.relativedelta или Облы, который действует как выражение хрон) - Определяет, как часто, что DAG работает, этот timedelta объект добавляется к execution_date вашего последнего экземпляра целевого, чтобы выяснить следующий график.

Простое конфигурирование schedule_interval и bash_command, так же как и в настройке cron.

4

Воздушный поток запускает вашу DAG при переходе на 2016/03/30 8:15:00 + интервал (ежедневно). Таким образом, ваша DAG будет работать до 2016/03/31 8:15:00.

Вы можете проверить Airflow FAQ