如何使用systemd与Airflow调度器?

11

文档中指定了与systemd的集成说明

我的要求是每次调度程序停止工作时都能自动重启。通常我手动使用airflow scheduler -D启动,但有时我不在场时它会停止。

阅读文档后,我对配置不确定。

GitHub包含以下文件:

airflow
airflow-scheduler.service
airflow.conf

我正在运行 Ubuntu 16.04

Airflow 已安装在:

home/ubuntu/airflow

我有以下路径:

etc/systemd

文档中建议:

将文件复制(或链接)到 /usr/lib/systemd/system

  1. 复制哪些文件?

将 airflow.conf 复制到 /etc/tmpfiles.d/

  1. 什么是 tmpfiles.d?

  2. airflow 文件中的 # AIRFLOW_CONFIG= 是什么意思?

换句话说,有没有更加“通俗易懂”的指南?


不是针对你的问题的实际答案,但我发现使用supervisord运行Airflow更容易。 - Georgi Raychev
2个回答

6
将Airflow与systemd文件集成,这样systemd可以在守护进程失败时自动重启它。这还可以在系统启动时自动启动Airflow Web服务器和调度程序。
根据当前配置从Airflow Githubsystemd文件夹中编辑airflow文件,设置AIRFLOW_CONFIGAIRFLOW_HOMESCHEDULER环境变量。
将服务文件(扩展名为.service的文件)复制到VM的/usr/lib/systemd/system目录中。
airflow.conf文件复制到/etc/tmpfiles.d/或/usr/lib/tmpfiles.d/。复制airflow.conf可以确保使用正确的所有者和权限(0755 airflow airflow)创建/run/airflow。如果不存在/run/airflow,请检查是否由airflow用户和airflow组拥有airflow:airflow,如果没有,请使用这些权限创建/run/airflow文件夹。

通过在命令行中发出systemctl enable <service>来启用此服务,如下所示。

sudo systemctl enable airflow-webserver
sudo systemctl enable airflow-scheduler

airflow-scheduler.service 文件应如下所示:

[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=airflow
Group=airflow
Type=simple
ExecStart=/bin/airflow scheduler
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

1
我们为什么应该将.service文件复制到/usr/lib/systemd/system而不是例如/etc/systemd/system - Newskooler
2
另一个问题:如果Airflow在本地虚拟环境中安装与全局安装有什么区别,是否会影响使用systemd? - Newskooler
你是如何解决 https://stackoverflow.com/questions/47291335/run-airflow-process-and-airflow-webserver-as-airflow-user 的问题的?我遇到了权限被拒绝的错误。 - Cyzanfar
1
@Newskooler 不,如果你的airflow安装在virtualenv中,它不应该有任何影响。在这种情况下,你需要做的唯一事情是在.service文件中激活VirtualEnv。 - kaxil
我能不使用 systemd 来完成这个吗?我正在尝试在没有 systemd 的 WSL 上设置它。 - Manuel Martinez

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接