2016-03-30 10 views
1

Cronの代わりに気流を使いたいと思っています。 しかし、予定通りにschedule_intervalが動作しません。気流を正しく動作させるにはschedule_interval

私は以下のようなpythonコードを書いています。
私の理解では、気流は「2016/03/30 8:15:00」に実行されていたはずですが、その時点では機能しませんでした。

「schedule_interval」:timedelta(分= 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を読んだことがある、と私はそれは少し違うcronを知っています。
私は "start_date"と "schedule_interval"の設定を手配しようとしています。

私は何をすればよいですか?

気流バージョン

INFO - 使用エグゼLocalExecutor

v1.7.0

アマゾン-linuxの-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は、最初のタスクインスタンスのexecution_dateを決定します。ベストプラクティスは、start_dateをDAGのschedule_intervalに丸めることです。

schedule_interval(datetime.timedeltaまたはdateutil.relativedelta.relativedeltaかのcron式として働き文字列) - DAGが実行されることを、このtimedeltaオブジェクトは、次のスケジュールを把握するために最新のタスクインスタンスのexecution_dateに追加されます頻度を定義します。

あなたのcron設定でschedule_intervalbash_commandを同じものに設定するだけで問題ありません。

4

エアフローは、2016/03/30 8:15:00 +のスケジュール間隔(日単位)が経過するとDAGを開始します。 DAGは2016/03/31 8:15:00に実行されます。

Airflow FAQ

関連する問題