如何重启气流网络服务器?

How do I restart airflow webserver?

我正在为我的数据管道项目使用气流。我已经在气流中配置了我的项目,并使用以下命令将气流服务器作为后端进程启动

airflow webserver -p 8080 -D True

服务器 运行 在后端成功。现在我想在气流中启用身份验证并在 airflow.cfg 中完成配置更改,但身份验证功能未反映在服务器中。当我在我的本地机器上停止并启动气流服务器时它工作。

那么如何在我的服务器中重新启动我的守护进程 airflow webserver 进程?

您可以检查 $AIRFLOW_HOME/airflow-webserver.pid 您的网络服务器守护程序的进程 ID 吗?

然后给它一个kill信号来杀死它

cat $AIRFLOW_HOME/airflow-webserver.pid | xargs kill -9

然后清除pid文件

cat /dev/null >  $AIRFLOW_HOME/airflow-webserver.pid

然后 运行

airflow webserver -p 8080 -D True

重新启动守护程序。

创建初始化脚本并使用命令 "daemon" 将此作为服务运行。

daemon --user="${USER}" --pidfile="${PID_FILE}" airflow webserver -p 8090 >> "${LOG_FILE}" 2>&1 &

使用 Airflow 网络服务器 (gunicorn) 的信号处理

Airflow 使用 gunicorn 作为 HTTP 服务器,因此您可以向其发送标准 POSIX 风格的信号。守护进程常用的重启信号是 HUP.

您需要找到 airflow 网络服务器守护程序的 pid 文件,以便获得正确的进程 ID 以将信号发送到。此文件可能在 $AIRFLOW_HOME/var/run 中,您会在其中找到很多 pids。

假设 pid 文件在 /var/run 中,您可以 运行 命令:

cat /var/run/airflow-webserver.pid | xargs kill -HUP

gunicorn 使用 preforking 模型,所以它有 master 和 worker 进程。 HUP 信号被发送到执行这些操作的主进程:[​​=21=]

HUP: Reload the configuration, start the new worker processes with a new configuration and gracefully shutdown older workers. If the application is not preloaded (using the preload_app option), Gunicorn will also load the new version of it.

gunicorn signal handling docs 中的更多信息。

这主要是 captaincapsaicin 回答的扩展版本,但使用 HUP (SIGHUP) 而不是 KILL (SIGKILL) 来重新加载进程,而不是实际杀死它并重新启动它。

这对我有用(多次!:D)

查找进程id:(假设8080为端口)

lsof -i tcp:8080

干掉它

kill <pid>

我建议 运行 airflow 以稳健的方式使用 systemd 自动恢复
所以你可以这样做:
- 开始 systemctl start airflow
- 停止 systemctl stop airflow
- 重启 systemctl restart airflow
为此,您需要一个 systemd 'unit' 文件。 作为(工作)示例,您可以使用以下内容:
put it in /lib/systemd/system/airflow.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]
PIDFile=/run/airflow/webserver.pid
EnvironmentFile=/home/airflow/airflow.env
User=airflow
Group=airflow
Type=simple
ExecStart=/bin/bash -c 'export AIRFLOW_HOME=/home/airflow ; airflow webserver --pid /run/airflow/webserver.pid'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=42s
PrivateTmp=true
[Install]
WantedBy=multi-user.target

P.S:将 AIRFLOW_HOME 更改为带有配置

的气流文件夹所在的位置

None 其中对我有用。我不得不删除 $AIRFLOW_HOME/airflow-webserver.pid 文件然后 运行 airflow webserver 工作。

就运行:

airflow webserver -p 8080 -D 

推荐的方法是创建并启用 airflow 网络服务器作为服务。如果您将网络服务器命名为 'airflow-webserver',运行 以下命令重新启动服务:

systemctl 重启 airflow-webserver

您可以使用来自 AWS Marketplace 的现成 AMI(即 LightningFLow),它提供在启动时启用的 Airflow 服务(网络服务器、调度程序、工作程序)。

注意:LightningFlow 预先集成了所有必需的库、Livy、自定义运算符和本地 Spark 集群。

Link 对于 AWS Marketplace:https://aws.amazon.com/marketplace/pp/Lightning-Analytics-Inc-LightningFlow-Integrated-o/B084BSD66V

由于问题与 webserver 有关,这对我的情况有效:

systemctl restart airflow-webserver

在我的例子中,我想终止之前的气流进程并开始。 因为下面的命令做了魔法

killall -9 airflow

查找 pid 具有:

airflow webserver

将给出:“网络服务器已经 运行 在 PID 21250 下。”

比杀死网络服务器进程:

kill 21250