web-dev-qa-db-ja.com

エアフローWebサーバーを再起動するにはどうすればよいですか?

データパイプラインプロジェクトにエアフローを使用しています。プロジェクトをエアフローで構成し、次のコマンドを使用してバックエンドプロセスとしてエアフローサーバーを起動しました

aiflow webserver -p 8080 -D True

サーバーはバックエンドで正常に実行されています。次に、airflowで認証を有効にし、airflow.cfgで構成を変更したいのですが、認証機能がサーバーに反映されません。ローカルマシンでエアフローサーバーを停止および起動すると、機能します。

では、サーバーでデーモンエアフローWebサーバープロセスを再起動するにはどうすればよいですか。

29
MJK

Systemdを使用した自動回復により、堅牢な方法でエアフローを実行することをお勧めします
だからできること:
-開始するにはsystemctl start airflow
-systemctl stop airflowを停止するには
-再起動するにはsystemctl restart airflow
このためには、systemd「ユニット」ファイルが必要です。 (実際の)例として、次を使用できます。
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

追伸:AIRFLOW_HOMEを設定で気流フォルダーに変更します

31
Vlad Lyga

WebサーバーデーモンのプロセスIDの$AIRFLOW_HOME/airflow-webserver.pidを確認できますか?

次に、killシグナルを渡してそれを殺します

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

その後、ちょうど実行

airflow webserver -p 8080 -D True

デーモンを再起動するには

22

Airflowウェブサーバー(gunicorn)の信号処理を使用する

AirflowはHTTPサーバーであるため、 gunicorn を使用するため、標準のPOSIXスタイルの信号を送信できます。デーモンが再起動するために一般的に使用する信号は、HUPです。

シグナルを送信する正しいプロセスIDを取得するには、エアフローWebサーバーデーモンのpidファイルを見つける必要があります。このファイルは、$AIRFLOW_HOMEまたは/var/runにあります。これは、多くのPIDを見つける場所です。

Pidファイルが/var/runにあると仮定すると、次のコマンドを実行できます。

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

gunicornはプリフォークモデルを使用するため、マスタープロセスとワーカープロセスがあります。 HUP信号はマスタープロセスに送信され、マスタープロセスは次のアクションを実行します。

HUP:構成を再読み込みし、新しい構成で新しいワーカープロセスを開始し、古いワーカーを正常にシャットダウンします。アプリケーションがプリロードされていない場合(preload_appオプションを使用)、Gunicornは新しいバージョンもロードします。

gunicornシグナル処理ドキュメント の詳細情報。

これは主に、captaincapsaicinの回答の拡張バージョンですが、プロセスを強制終了して再起動する代わりに、HUP(SIGKILL)ではなくKILL(SIGHUP)を使用してプロセスをリロードします。

9
MAP

これは私のために働いた(複数回!:D)

プロセスIDを見つけます:(8080がポートであると仮定して)

lsof -i tcp:8080

それを殺します

kill <pid>
9
Dotan

Initスクリプトを作成し、コマンド「daemon」を使用してこれをサービスとして実行します。

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