python-2.7 airflow

python 2.7 - ¿Cómo reinicio el servidor web de flujo de aire?



python-2.7 airflow (6)

Estoy utilizando el flujo de aire para mi proyecto de tubería de datos. He configurado mi proyecto en flujo de aire e inicio el servidor de flujo de aire como un proceso de back-end usando el siguiente comando

aiflow webserver -p 8080 -D True

Servidor ejecutándose exitosamente en el backend. Ahora quiero habilitar la autenticación en el flujo de aire y realizar cambios de configuración en airflow.cfg, pero la funcionalidad de autenticación no se refleja en el servidor. Cuando detengo e inicio el servidor de flujo de aire en mi máquina local, funciona.

Entonces, ¿cómo puedo reiniciar el proceso del servidor web de flujo de aire de mi daemon en mi servidor?


Usar el manejo de la señal del servidor web Airflow (Gunicorn).

Airflow utiliza gunicorn como servidor HTTP, por lo que puede enviar señales estándar de estilo POSIX. Una señal comúnmente utilizada por los demonios para reiniciar es HUP .

Necesitará ubicar el archivo pid para el daemon del servidor web de flujo de aire para obtener la identificación de proceso correcta para enviar la señal. Este archivo podría estar en $AIRFLOW_HOME o también /var/run , que es donde encontrará muchos pids.

Suponiendo que el archivo pid está en /var/run , podría ejecutar el comando:

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

gunicorn utiliza un modelo de preforking, por lo que tiene procesos maestros y de trabajo. La señal HUP se envía al proceso maestro, que realiza estas acciones:

HUP: vuelva a cargar la configuración, inicie los nuevos procesos de trabajo con una nueva configuración y cierre con gracia los trabajadores más antiguos. Si la aplicación no está precargada (utilizando la opción preload_app), Gunicorn también cargará la nueva versión.

Más información en los documentos de manejo de señales gunicorn .

Esta es principalmente una versión expandida de la respuesta de captaincapsaicin, pero usando HUP (SIGHUP) en lugar de KILL (SIGKILL) para recargar el proceso en lugar de matarlo y reiniciarlo.


¿Puede consultar $AIRFLOW_HOME/airflow-webserver.pid para la ID de proceso de su demonio de servidor web?

Entonces pásale una señal de muerte para matarlo

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

Entonces solo corre

airflow webserver -p 8080 -D True

para reiniciar el daemon


Aconsejo ejecutar el flujo de aire de manera robusta, con auto-recuperación con systemd
para que puedas hacer
- para systemctl start airflow inicio systemctl start airflow
- para systemctl stop airflow
- para reiniciar systemctl restart airflow
Para esto necesitarás un archivo ''unit'' de systemd. Como ejemplo (de trabajo) puede usar lo siguiente:
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

PS: cambia AIRFLOW_HOME a donde está tu carpeta de flujo de aire con la configuración


Esto funcionó para mí (varias veces!: D)

encuentre el id del proceso: (asumiendo que 8080 es el puerto)

lsof -i tcp:8080

mátalo

kill <pid>


Ninguno de estos funcionó para mí. Tuve que eliminar el $AIRFLOW_HOME/airflow-webserver.pid y, a continuación, funcionó el airflow webserver .


cree un script de inicio y use el comando "daemon" para ejecutar esto como servicio.

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