如何安排dag运行一年中某个特定时间。即一次

时间:2017-11-13 09:44:28

标签: python-2.7 airflow apache-airflow airflow-scheduler

我正在尝试执行一个只需要运行一次的dag。所以我将dag执行间隔设置为'@once'。但是,我收到了此链接中提到的错误 - https://issues.apache.org/jira/browse/AIRFLOW-1400

现在我正在尝试传递确切的执行日期,如下所示:

default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2017,11,13),
'email': ['airflow@airflow.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(seconds=5)
}

dag = DAG(
    dag_id='dagNameTest', default_args=default_args, schedule_interval='12 09 13 11 2017',concurrency=1)

这会引发错误:

File "/usr/lib/python2.7/site-packages/croniter/croniter.py", line 543, in expand
expr_format))
CroniterBadCronError: [12 09 13 11 2017] is not acceptable, out of range

有人可以帮忙解决此问题。

谢谢, 阿琼

2 个答案:

答案 0 :(得分:0)

2017年的“星期几”现货。试试12 09 13 11 *。您正尝试在“schedule interval ”字段中设置“日期”。从技术上讲,这将每年安排一次。您可以通过这种方式运行它,并在完成后停用DAG。

答案 1 :(得分:0)

设置所需分钟,小时,日,月和工作日的年度间隔。 I.E. 12 09 13 11 *。分别在该日期之前和之后设置您的DAG的start_dateend_date,并且它应该只在该时间运行一次。

default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2017,1,1),
'end_date': datetime(2017,12,31),
'email': ['airflow@airflow.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(seconds=5)
}

dag = DAG(
    dag_id='dagNameTest', default_args=default_args, schedule_interval='12 09 13 11 *',concurrency=1)

由于日期时间可以占用您的时间,您可以将start_date设置为小时和分钟,然后使用@once计划。但我自己也没试过。

default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2017,11,13,9,11),
'email': ['airflow@airflow.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(seconds=5)
}

dag = DAG(
    dag_id='dagNameTest', default_args=default_args, schedule_interval='@once',concurrency=1)