Apache Airflow: How do I restart airflow webserver?
Ты поменял `airflow.cfg`, добавил аутентификацию, сохранил файл и идешь в браузер. А там ничего не изменилось. Потому что твой webserver, запущенный в фоне, все
Ты поменял airflow.cfg, добавил аутентификацию, сохранил файл и идешь в браузер. А там ничего не изменилось. Потому что твой webserver, запущенный в фоне, все еще живет со старым конфигом.
Ты вспоминаешь, что когда-то давно запустил его с -D, и теперь он где-то там висит. Первая мысль — найти и убить. И это даже сработает. Но это путь в никуда, потому что в один прекрасный день процесс просто упадет и не поднимется.
Почему kill -9 — это не решение
Найти процесс можно через ps aux | grep airflow. Убить через kill -9 <PID>. И даже запустить заново той же командой с -D.
Но это хрупко. Если сервер перезагрузится — процесс не запустится сам. Если процесс упадет из-за ошибки — он не перезапустится. Ты теряешь контроль и автоматическое восстановление.
Правильный путь — запускать Airflow как сервис. В мире Linux это почти всегда означает systemd.
Systemd: чтобы спать спокойно
Systemd возьмет на себя управление процессом: поднимет его при старте системы, перезапустит при падении, аккуратно остановит по команде и, что важно для нас, перечитает конфигурацию при рестарте.
Для этого нужен unit-файл. Положи его, например, в /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
Теперь управление твоим сервером сводится к трем командам:
# Запустить
systemctl start airflow
# Остановить
systemctl stop airflow
# Перезапустить (и применить новый конфиг!)
systemctl restart airflow
Именно restart — твой ответ на вопрос. Меняешь airflow.cfg, делаешь systemctl restart airflow, и через пару секунд изменения в силе.
Важные нюансы на дорожку
Обрати внимание на две критичные строки в unit-файле.
EnvironmentFile=/home/airflow/airflow.env — здесь должны быть твои переменные окружения, если они есть. Например, AIRFLOW__CORE__SQL_ALCHEMY_CONN.
И главное: export AIRFLOW_HOME=/home/airflow. Укажи здесь реальный путь к своей папке Airflow, где лежит тот самый airflow.cfg. Без этого сервис будет смотреть не туда.
После создания файла не забудь дать системе его прочитать: systemctl daemon-reload. И добавь в автозагрузку, если нужно: systemctl enable airflow.
Теперь твой webserver не потеряется. А чтобы применить новый конфиг, тебе не нужно вспоминать PID — только одна команда.