气流DAG每秒运行而不是每分钟运行一次

时间:2018-06-04 21:32:03

标签: airflow airflow-scheduler

我正在尝试安排我的DAG每分钟运行但它似乎每秒运行一次。根据我读过的所有内容,我应该只需要在我的DAG中加入schedule_interval='*/1 * * * *', #..every 1 minute即可,但它不起作用。这里有一个简单的例子我设置测试它:

from airflow import DAG
from airflow.operators import SimpleHttpOperator, HttpSensor, EmailOperator, S3KeySensor
from datetime import datetime, timedelta
from airflow.operators.bash_operator import BashOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 6, 4),
    'schedule_interval': '*/1 * * * *', #..every 1 minute
    'email': ['airflow@airflow.com'],
    'email_on_failure': True,
    'email_on_retry': False,
    'retries': 2,
    'retry_delay': timedelta(minutes=1)
}

dag = DAG(
    dag_id='airflow_slack_example',
    start_date=datetime(2018, 6, 4),
    max_active_runs=3,
    schedule_interval='*/1 * * * *', #..every 1 minute
    default_args=default_args,
)

test= BashOperator(
    task_id='test',
    bash_command="echo hey >> /home/ec2-user/schedule_test.txt",
    retries=1,
    dag=dag)

更新

在与@Taylor Edmiston谈论他的解决方案之后,我们意识到我需要添加catchup=False的原因是因为我使用Pip安装了Airflow,它使用了过时的Airflow版本。显然,如果您使用master branch of it's repository中的Airflow,那么您不需要包含catchup=False,以便像我一样尝试每分钟运行一次。因此,尽管接受的答案解决了我的问题,但它并没有解决@Taylor Edmiston发现的潜在问题。

2 个答案:

答案 0 :(得分:4)

尝试在catchup=False中添加DAG()。由于您声明的start_date,您的DAG可能会尝试回填。

答案 1 :(得分:4)

DAG上的schedule_interval是正确的:*/1 * * * *every minute

您还可以从start_date移除schedule_intervaldefault_args,因为它们与提供给DAG的kwargs一起是多余的。

如果您在第一次创建此DAG时更改了计划,则可能会让Airflow感到困惑。在数据库中尝试deleting the DAG,然后重新启动调度程序和Web服务器。如果您在Airflow的主分支上,它就像$ airflow delete_dag my_dag一样简单;否则,链接的答案解释了如何在其他版本上执行此操作。

我把你的代码煮到了这个以检查它,它确实在Airflow的主分支内运行时每分钟运行一次DAG运行。

from datetime import datetime

from airflow import DAG
from airflow.operators.bash_operator import BashOperator

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
}

dag = DAG(
    dag_id='airflow_slack_example',
    start_date=datetime(2018, 6, 4),
    schedule_interval='*/1 * * * *',
    default_args=default_args,
)

test = BashOperator(
    task_id='test',
    bash_command='echo "one minute test"',
    dag=dag,
)

DAG运行:

enter image description here