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

MJK*_*MJK 31 python-2.7 airflow

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

aiflow webserver -p 8080 -D True
Run Code Online (Sandbox Code Playgroud)

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

那么如何在我的服务器中重新启动我的守护程序气流Web服务器进程?

Vla*_*yga 33

我建议以强大的方式运行气流,使用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
Run Code Online (Sandbox Code Playgroud)

PS:将AIRFLOW_HOME更改为配置的airflow文件夹

  • 这是正确的方法.有关upstart和systemd的示例脚本:https://github.com/apache/incubator-airflow/tree/master/scripts (4认同)

cap*_*cin 23

你能检查$AIRFLOW_HOME/airflow-webserver.pid你的webserver守护进程的进程ID吗?

然后传递一个杀死信号来杀死它

cat $AIRFLOW_HOME/airflow-webserver.pid | xargs kill -9
Run Code Online (Sandbox Code Playgroud)

然后跑吧

airflow webserver -p 8080 -D True
Run Code Online (Sandbox Code Playgroud)

重启守护进程

  • 为什么在 -D 之后需要 `True`? (3认同)
  • 你是对的。只要您传递标志,您就不需要显式传递 `True` (3认同)

Dot*_*tan 11

这为我工作(多次!:D)

找到进程ID :(假设端口是8080)

lsof -i tcp:8080
Run Code Online (Sandbox Code Playgroud)

杀死它

kill <pid>
Run Code Online (Sandbox Code Playgroud)


MAP*_*MAP 10

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

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

您需要找到气流网络服务器守护程序的pid文件,以便获取正确的进程ID以发送信号.这个文件可以在$AIRFLOW_HOME或者也可以/var/run,你可以找到很多pids.

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

cat /var/run/airflow-webserver.pid | xargs kill -HUP
Run Code Online (Sandbox Code Playgroud)

gunicorn使用preforking模型,因此它有主人和工人流程.该HUP信号被发送到主过程,其执行下述动作:

HUP:重新加载配置,使用新配置启动新的工作进程并正常关闭旧工作程序.如果未预加载应用程序(使用preload_app选项),Gunicorn也将加载它的新版本.

有关gunicorn信号处理文档的更多信息.

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


off*_*dal 5

就我而言,我想终止之前的气流过程并开始。因为下面的命令发挥了魔力

killall -9 airflow
Run Code Online (Sandbox Code Playgroud)