如何重启气流网络服务器?
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
我正在为我的数据管道项目使用气流。我已经在气流中配置了我的项目,并使用以下命令将气流服务器作为后端进程启动
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