Как перезапустить веб-сервер воздушного потока?

Я использую воздушный поток для моего проекта конвейера данных. Я настроил свой проект в воздушном потоке и запустил сервер воздушного потока в качестве внутреннего процесса, используя следующую команду

aiflow webserver -p 8080 -D True

Сервер успешно работает в бэкэнд. Теперь я хочу включить аутентификацию в воздушном потоке и внести изменения конфигурации в airflow.cfg, но функция аутентификации не отражена на сервере. когда я останавливаюсь и запускаю сервер воздушного потока на своей локальной машине, он работает.

Итак, как я могу перезапустить процесс веб-сервера воздушного потока daemon на моем сервере?

Ответ 1

Я советую работать воздушным потоком прочным способом, с автоматическим восстановлением с помощью 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

PS: измените AIRFLOW_HOME, где ваша папка воздушного потока с настройкой

Ответ 2

Можете ли вы проверить $AIRFLOW_HOME/airflow-webserver.pid для идентификатора процесса вашего демона веб-сервера?

Затем передайте ему сигнал об убийстве, чтобы убить его

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

Затем просто запустите

airflow webserver -p 8080 -D True

перезапустить демон

Ответ 3

Использовать обработку сигнала веб-сервера Airflow (gunicorn)

Airflow использует gunicorn как HTTP-сервер, поэтому вы можете отправлять ему стандартные сигналы в стиле POSIX. Сигналом, обычно используемым демонами для перезапуска, является HUP.

Вам нужно будет найти файл pid для демона веб-сервера воздушного потока, чтобы получить правильный идентификатор процесса для отправки сигнала. Этот файл может быть в $AIRFLOW_HOME или также /var/run, где вы найдете много pids.

Предполагая, что файл pid находится в /var/run, вы можете запустить команду:

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

gunicorn использует предпродажную модель, поэтому у нее есть мастер и рабочие процессы. Сигнал HUP отправляется мастер-процессу, который выполняет следующие действия:

HUP: перезагрузите конфигурацию, запустите новые рабочие процессы с новой конфигурацией и изящно завершите работу старых работников. Если приложение не предварительно загружено (с использованием опции preload_app), Gunicorn также загрузит новую версию.

Дополнительная информация в документах обработки сигналов стрельбы.

Это в основном расширенная версия ответа captaincapsaicin, но вместо HUP (SIGUP) вместо KILL (SIGKILL) перезагружать процесс, а не убивать его и перезапускать.

Ответ 4

Это сработало для меня (несколько раз!: D)

найти идентификатор процесса: (предполагается, что порт 8080 - это порт)

lsof -i tcp:8080

убей это

kill <pid>

Ответ 5

Создайте сценарий инициализации и используйте команду "daemon" для запуска этого как службы.

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

Ответ 6

Ни один из них не работал для меня. Мне пришлось удалить файл $AIRFLOW_HOME/airflow-webserver.pid а затем запустить airflow webserver.