web-dev-qa-db-fra.com

Comment redémarrer le serveur Web Airflow?

J'utilise airflow pour mon projet de pipeline de données. J'ai configuré mon projet dans le flux d'air et lance le serveur de flux d'air en tant que processus principal à l'aide de la commande suivante

aiflow webserver -p 8080 -D True

Serveur fonctionnant avec succès dans le backend. Maintenant, je veux activer l'authentification dans airflow et les modifications apportées à la configuration dans airflow.cfg, mais la fonctionnalité d'authentification n'est pas reflétée dans le serveur. quand j'arrête et redémarre le serveur de flux d'air sur mon ordinateur local, cela fonctionne.

Alors, comment puis-je redémarrer le processus de mon serveur Web Airflow daemon sur mon serveur ??

29
MJK

Je conseille de faire fonctionner le flux d'air de manière robuste, avec récupération automatique avec systemd
afin que vous puissiez faire:
- commencer systemctl start airflow
- arrêter systemctl stop airflow
- recommencer systemctl restart airflow
Pour cela, vous aurez besoin d’un fichier systemd "unité". Comme exemple (de travail), vous pouvez utiliser les éléments suivants:
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: changez AIRFLOW_HOME en votre dossier d’airflow avec la configuration

31
Vlad Lyga

Peux-tu vérifier $AIRFLOW_HOME/airflow-webserver.pid pour l'identifiant du processus de votre démon de serveur Web?

Puis transmettez un signal pour le tuer

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

Alors viens courir

airflow webserver -p 8080 -D True

redémarrer le démon

22
captaincapsaicin

Utiliser le traitement du signal du serveur Web Airflow (gunicorn)

Airflow utilise gunicorn en tant que serveur HTTP, vous pouvez donc lui envoyer des signaux de style POSIX standard. Un signal couramment utilisé par les démons pour redémarrer est HUP.

Vous devez localiser le fichier pid du démon airflow webserver pour obtenir le bon identifiant de processus auquel envoyer le signal. Ce fichier pourrait être en $AIRFLOW_HOME ou aussi /var/run, où vous trouverez beaucoup de pids.

En supposant que le fichier pid est en /var/run, vous pouvez exécuter la commande:

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

gunicorn utilise un modèle de préforçage, de sorte qu'il comporte des processus maître et ouvrier. Le signal HUP est envoyé au processus maître, qui effectue les actions suivantes:

HUP: Rechargez la configuration, démarrez les nouveaux processus de travail avec une nouvelle configuration et arrêtez normalement les travailleurs plus anciens. Si l'application n'est pas préchargée (à l'aide de l'option preload_app), Gunicorn en chargera également la nouvelle version.

Plus d'informations dans le documents de traitement de signaux gunicorn .

C'est principalement une version développée de la réponse de captaincapsaicin, mais en utilisant HUP (SIGHUP) au lieu de KILL (SIGKILL) pour recharger le processus au lieu de le tuer et de le redémarrer.

9
MAP

Cela a fonctionné pour moi (plusieurs fois!: D)

trouver l'identifiant du processus: (en supposant que 8080 est le port)

lsof -i tcp:8080

tue le

kill <pid>
9
Dotan

Créez un script d'initialisation et utilisez la commande "daemon" pour l'exécuter en tant que service.

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