Cronの代わりにAirflowを使用したいと思います。しかし、schedule_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 を読みましたが、それは少し異なるcronであることを知っています。
そこで、「start_date」と「schedule_interval」の設定を調整しようとしています。
誰か私が何をすべきか知っていますか?
気流バージョン
情報-executor LocalExecutorの使用
v1.7.0
Amazon-linux-AMI/2015.09-release-notes
2016/03/30 8:15:00 +スケジュール間隔(毎日)が経過すると、AirflowがDAGを開始します。したがって、DAGは2016/03/31 8:15:00に実行されます。
Airflow FAQ を確認できます
これを試して:
# -*- 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
(crontime式として機能するdatetime.timedeltaまたはdateutil.relativedelta.relativedeltaまたはstr)– DAGが実行される頻度を定義します。このtimedeltaオブジェクトが最新のタスクインスタンスのexecution_dateに追加され、次のスケジュールを把握します。
単にschedule_interval
およびbash_command
cron設定と同じで問題ありません。
airflow cron式の作成方法が本当にわからない場合は、 crontab.gur を使用してみてください。
_@daily
_を指定した例では、深夜過ぎにジョブが実行されます。 08:15を含む固定_start_date
_に関連するtimedelta(days=1)
に変更してみてください。または、_schedule_interval='15 08 * * *'
_のcron仕様を使用することもできます。その場合、最初の実行が機能する日の前日の8:15より前の開始日が機能します。
_depends_on_past: False
_は既にデフォルトであり、DAGパラメーターの_catchup=false
_とその動作を混同している可能性があることに注意してください。これにより、開始日とDAGスケジュール間隔の間の過去の実行が回避されます。実行しました。