我是Airflow的新手。我想我已经阅读了Airflow文档中关于调度的所有文章,但是我仍然无法在start_date + schedule_interval之后运行我的DAG(即没有任务实例)。我正在使用码头工具。我想知道我错过了一个调度Dags的命令,尽管在我使用教程代码时并非如此。
这是我的dockerfile。
FROM ubuntu:latest
FROM python:3
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev apt-utils build-essential
RUN pip install --upgrade pip
# Installs these and a few others
# mysqlclient==1.3.10
# airflow==1.7.1.3
COPY dependencies /dependencies
RUN pip install -r dependencies/requirements_loader.txt
COPY airflow /root/airflow
# Load other dependencies
# I have tried many different variation of these commands with no luck
CMD airflow webserver -p 8080
CMD airflow scheduler -d DAG_id
我正在使用PythonOperator和一个加载我编写的库的模块。我不确定这是否是正确的方法,但它有效airflow test dag_id execution_date
。这是我最特别的。测试工作正常,但是当我开始气流时它实际上从未运行过。我正在使用LocalExecutor。这是我的傻瓜。
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
from my_lib import my_func
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2017, 3, 6),
'email_on_failure': False,
'email_on_retry': False,
'email': ['airflow@airflow.com'],
'retries': 1,
'retry_delay': timedelta(minutes=5)
}
dag = DAG('dag_id', default_args=default_args, schedule_interval="31 2 * * *")
t1 = PythonOperator(
dag=dag,
task_id='run_my_func',
provide_context=False,
python_callable=my_func)
我还搞乱了计划间隔和开始日期,包括一个月前开始的@daily
间隔日期。这些都没有给我带来任何好运。
真正令人困惑的是,当我测试dag时,它可以工作,但是在部署之后它没有被调度并创建任何task_instances。
任何人都可以指出我正确的方向进行正确安排dags的部署吗?我做错了什么?
答案 0 :(得分:1)
问题是你不能在dockerfile的末尾使用两个CMD命令。一旦我使用docker-compose创建了两个dockerfiles,它就可以正常工作。
Dockerfile中只能有一条CMD指令。如果列出多个CMD,则只有最后一个CMD才会生效。