我让网络服务器正常工作,我的 airflow-scheduler.service 文件启动调度程序,它找到了我的 dags 等。但是,任务未运行:
我看到有关/bin/sh 的错误消息
ERROR - failed to execute task Command 'exec bash -c run'
我有我的系统配置文件:
#!/bin/bash
PATH=/opt/anaconda/anaconda3/envs/airflow_env/bin/airflow
AIRFLOW_CONFIG=/mnt/var/airflow/airflow.cfg
AIRFLOW_HOME=/mnt/var/airflow
和我的气流调度程序.服务文件:
#!/bin/bash
[Unit]
Description=Airflow scheduler daemon
After=network.target postgresql.service
Wants=postgresql.service
[Service]
EnvironmentFile=/etc/sysconfig/airflow
User=airflow
Group=airflow
Type=simple
ExecStart=/opt/anaconda/anaconda3/envs/airflow_env/bin/airflow scheduler
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
这是 journalctl 记录,它显示了我收到的 bash 错误:
[2017-10-30 18:36:13,764] {base_executor.py:50} INFO - Adding to queue: airflow run user_presence_raw_etl transform_raw_user_presence 2017-10-30T14:00:00 --local -sd /mnt/var/airflow/dags/bin/user_p
Oct 30 18:36:13 airflow[4742]: [2017-10-30 18:36:13,765] {jobs.py:1443} INFO - Heartbeating the executor
Oct 30 18:36:13 airflow[4742]: [2017-10-30 18:36:13,783] {local_executor.py:45} INFO - LocalWorker running airflow run user_presence_raw_etl transform_raw_user_presence 2017-10-30T14:00:00 --local -sd /mnt/var/airflow/dags/bin/us
Oct 30 18:36:13 airflow[4742]: /bin/sh: 1: exec: bash: not found
Oct 30 18:36:13 airflow[4742]: [2017-10-30 18:36:13,865] {local_executor.py:52} **ERROR - failed to execute task Command 'exec bash -c 'airflow run** user_presence_raw_etl transform_raw_user_presence 2017-10-30T14:00:00 --local -sd /mnt/var/airf
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,786] {jobs.py:1407} INFO - Heartbeating the process manager
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,786] {dag_processing.py:559} INFO - Processor for /mnt/var/airflow/dags/bin/prod/hourly_agent_dag.py finished
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,789] {dag_processing.py:627} INFO - Started a process (PID: 5425) to generate tasks for /mnt/var/airflow/dags/bin/prod/daily_agent_email_dag.py - logging into /mnt/var/airflow/l
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,831] {jobs.py:1000} INFO - No tasks to send to the executor
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,832] {jobs.py:1443} INFO - Heartbeating the executor
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,833] {jobs.py:1195} INFO - Executor reports user_presence_raw_etl.transform_raw_user_presence execution_date=2017-10-30 14:00:00 as failed
看起来您的系统配置文件正在破坏$PATH
环境变量,因此出现错误:
Oct 30 18:36:13 airflow[4742]: /bin/sh: 1: exec: bash: not found
尝试将该行设置为以下内容:
PATH=/opt/anaconda/anaconda3/envs/airflow_env/bin/airflow:$PATH
看起来您以气流以外的用户身份安装了气流。我有一个airflow-scheduler.service
文件,该文件指定了我用于安装气流的用户,在我的情况下,mghen
.
[Unit]
Description=Airflow scheduler daemon
After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service
Wants=postgresql.service mysql.service redis.service rabbitmq-server.service
[Service]
EnvironmentFile=/etc/sysconfig/airflow
User=mghen
Group=mghen
Type=simple
ExecStart=/usr/local/bin/airflow scheduler
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
我遇到了类似的问题,但没有看到相同的错误消息。无论如何,也许改变User
和Group
可能会有所帮助。由于您在启动气流(ExecStart=/opt/anaconda/anaconda3/envs/airflow_env/bin/airflow scheduler
)时指定了绝对路径,因此它看起来像是作为airflow
用户启动正常,但实际上airflow
用户实际上无法airflow
程序运行,因为其他用户安装了它。Idk 如何修复我刚刚更改User
并Group
airflow-*.service
文件中PATH
。
或者,也许您可以将airflow
安装为airflow
用户,以便它可以在airflow
用户的PATH
中使用。
由 LocalExecutor 生成的 worker 进程无法运行气流,因为它在 PATH
中不可用。您只能为sysconfig
配置它。在airflow存储库中提供的示例,airflow-scheduler.service他们希望气流对用户来说是可执行的。
我的建议是为气流创建 virtualenv,在那里安装 airflow,然后为每个要运行与气流相关的外壳(例如 workers、调度程序或 Web 服务器)激活它。