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