airflow-scheduler.service

airflow-scheduler.service

我运行airflow scheduler命令,它正在运行。但是,我无法设置气流调度程序服务。

以下是我的气流调度服务代码。

[Unit]
Description=Airflow scheduler daemon
After=network.target postgresql.service rabbitmq-server.service
Wants=postgresql.service rabbitmq-server.service

[Service]
EnvironmentFile=/home/ubuntu/airflow
User=ubuntu
Group=ubuntu
Type=simple
ExecStart=/bin/airflow scheduler -n ${SCHEDULER_RUNS}
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

但是,当我启动 airflow-scheduler 时,它没有运行。我收到以下错误:

May 25 21:11:37 ip-11-210-11-108 systemd[1]: airflow-scheduler.service: Service hold-off time over, scheduling restart.
May 25 21:11:37 ip-11-210-11-108 systemd[1]: Stopped Airflow scheduler daemon.
-- Subject: Unit airflow-scheduler.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit airflow-scheduler.service has finished shutting down.
May 25 21:11:37 ip-11-210-11-108 systemd[1]: airflow-scheduler.service: Failed to load environment files: No such file or directory
May 25 21:11:37 ip-11-210-11-108 systemd[1]: airflow-scheduler.service: Failed to run 'start' task: No such file or directory
May 25 21:11:37 ip-11-210-11-108 systemd[1]: Failed to start Airflow scheduler daemon.
-- Subject: Unit airflow-scheduler.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit airflow-scheduler.service has failed.
--
-- The result is failed.
May 25 21:11:37 ip-11-210-11-108 systemd[1]: airflow-scheduler.service: Unit entered failed state.
May 25 21:11:37 ip-11-210-11-108 systemd[1]: airflow-scheduler.service: Failed with result 'resources'.

我没有使用过 systemd。SCHEDULER_RUNS 是什么?如何设置?

答案1

我知道我正在挖掘一篇过时的帖子,但我也想弄清楚为什么我无法让调度程序在服务器运行时自动运行。

我确实找到了一个适用于 Ubuntu 18.04 和 18.10 的解决方案

我提供了完整的说明如何安装 Airflow 和 PostgreSQL在链接的后端这里

摘自我的文章后半部分:

本质上,它归结为对 airflow-scheduler.system 文件进行特定的更改。

这是在 Ubuntu 上实施的“陷阱”之一。创建 Airflow 的开发团队将其设计为在不同的 Linux 发行版上运行,因此需要进行一个小的(但关键的)更改,以便 Airflow 在服务器开启时自动运行。默认的 systemd 服务文件最初如下所示:

[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

但是,这不起作用,因为“EnvironmentFile”协议在 Ubuntu 18 上不起作用。相反,注释掉该行并添加:

Environment="PATH=/home/ubuntu/anaconda3/envs/airflow/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

您可能希望至少为 Airflow Scheduler 创建一个 systemd 服务文件,如果您希望 UI 也自动启动,那么可能还需要为 Webserver 创建一个 systemd 服务文件。事实上,我们确实希望在此实现中同时使用这两个文件,因此我们将创建两个文件,airflow-scheduler.service 和 airflow-webserver.service。这两个文件都将复制到 /etc/systemd/system 文件夹。如下所示:


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/default/airflow
Environment="PATH=/home/ubuntu/anaconda3/envs/airflow/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
User=airflow
Group=airflow
Type=simple
ExecStart=/home/ubuntu/anaconda3/envs/airflow/bin/airflow scheduler
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target
#airflow-webserver.service

airflow-web服务器.service

[Unit]
Description=Airflow webserver 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/default/airflow
Environment="PATH=/home/ubuntu/anaconda3/envs/airflow/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
User=airflow
Group=airflow
Type=simple
ExecStart=/home/ubuntu/anaconda3/envs/airflow/bin/airflow webserver -p 8085 --pid /home/ubuntu/airflow/airflow-webserver.pid
Restart=on-failure
RestartSec=5s
PrivateTmp=true

[Install]
WantedBy=multi-user.target

最后,通过超级用户复制命令 sudo cp 将这两个文件复制到 /etc/systemd/systemd 文件夹,就可以启动了:

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

答案2

在你的 systemd 文件中,有这样一行

EnvironmentFile=/home/ubuntu/airflow

它应该指向一个 EnvironmentFile,systemd 使用它来保存一些变量。看起来你让它指向 airflow 主目录。

它应该指向一个名为的文件airflow,该文件里面应该有一个用于 SCHEDULER RUNS 的变量。请参阅此处的 airflow 文件: https://github.com/apache/incubator-airflow/tree/master/scripts/systemd

您还遇到此错误:无法运行“启动”任务:没有此文件或目录

这与此行相关: ExecStart=/bin/airflow scheduler -n ${SCHEDULER_RUNS}

该行表示运行/bin/airflow,我假设它不存在于您的机器上。它可能在/usr/local/bin/airflow或类似的地方。您可以运行which airflow以查看您的实际安装位​​置。您可能能够为其添加符号链接,以便 /bin/airflow 指向您的实际位置,但无需过度复杂化,至少先让它工作。刚刚检查过,显然符号链接确实在 systemd 中起作用https://bugzilla.redhat.com/show_bug.cgi?id=955379

相关内容