Настройте Airflow как службу systemd
Airflow поддерживает интеграцию с любыми системами на основе systemd
или upstart
. Это мой предпочтительный способ запускать что-то автоматически каждый раз, когда система перезагружается, и контролировать ее поведение. Это дает нам возможность управлять и отслеживать состояние веб-сервера и планировщика воздушного потока. Это также позволяет нам автоматически перезапускать демоны воздушного потока при сбое или перезапуске.
Небольшое примечание о systemd
: это системный и сервисный менеджер для операционных систем Linux. Это демон управления системой, первый процесс, который запускается при загрузке. Он запускает процессы, которые требуются ОС Linux при ее загрузке.
Это один из быстрых способов запуска Airflow с помощью systemd
. Результатом этого будет то, что наши воздушные потоки webserver
и web-scheduler
будут запускаться автоматически при перезапуске нашей системы и предоставлять API более высокого уровня для проверки состояния, запуска, остановки и перезапуска воздушного потока, настроенного так же, как и любые другие системные процессы Linux.
Обратите внимание, что я запускаю все эти команды как пользователь root, и вы можете использовать sudo везде, где это необходимо.
airflow-webserver.service
Нам нужно создать новый файл по адресу:/etc/systemd/system/airflow-webserver.service
Содержимое этого файла должно быть примерно таким:
[Unit] Description=Airflow webserver daemon After=network.target postgresql-9.6.service Wants=postgresql-9.6.service [Service] RuntimeDirectory=airflow RuntimeDirectoryMode=0775 Type=simple ExecStart=/usr/bin/bash -c 'source /root/anaconda3/bin/activate ; airflow webserver --pid /run/airflow/webserver.pid' Restart=on-failure RestartSec=5s PrivateTmp=true [Install] WantedBy=multi-user.target
Это создает службу веб-сервера Airflow. Обратите внимание, что это лишь один из способов настройки службы веб-сервера воздушного потока. Мы можем настроить и изменить вещи по мере необходимости.
After
: это указывает, что службе веб-сервера воздушного потока необходимо, чтобы сеть была готова, прежде чем она будет запущена. После того, как Networking будет готов, он также указывает, что наша служба ожидает, что база данных Postgres будет запущена и работает, прежде чем мы запустим нашу веб-службу воздушного потока.
Wants
: Это означает, что нам нужно, чтобы Postgres был запущен до запуска нашей службы, но, допустим, служба Postgres вышла из строя и не запустилась при запуске системы, это не повлияет на нашу службу. Wants
создайте более слабую зависимость, чем Requires
.
RuntimeDirectory и RuntimeDirectoryMode должны были указать, в каком каталоге это должно работать. Мне пришлось добавить его, чтобы преодолеть theError: /run/airflow doesn’t exist. Can’t create pidfile.
ExecStart
: указывает, какую команду необходимо запустить с аргументами при запуске этой службы. Это то, что отвечает за запуск процесса веб-сервера воздушного потока.
Restart
: это означает, что наша служба должна быть перезапущена, когда служба веб-сервера воздушного потока будет убита или перезапущена, за исключением того, что вы пытаетесь вручную остановить эту службу с помощью команды systemctl stop
.
PrivateTmp
: это устанавливает пространство имен файловой системы для выполняемого процесса, которое не используется совместно процессами за пределами пространства имен. Он монтирует каталоги private /tmp
and /var/tmp
.
WantedBy
: он будет загружен как часть стандартного процесса многопользовательской загрузки, и служба будет запущена при запуске перечисленных After
служб.
Чтобы создать и запустить службу airflow-webserver:
vi /etc/systemd/system/airflow-webserver.service chmod 664 /etc/systemd/system/airflow-webserver.service systemctl enable airflow-webserver.service systemctl start airflow-webserver
Вы можете проверить статус услуги, используя:
systemctl status airflow-webserver
Каждый раз, когда вы вносите какие-либо изменения в файл airflow-webserver.service
, чтобы они вступили в силу,
systemctl daemon-reload
Вы можете отслеживать журналы веб-сервера воздушного потока, используя:
journalctl -u airflow-webserver.service -f
Точно так же мы можем создать airflow-scheduler.service.
vi /etc/systemd/system/airflow-scheduler.service chmod 664 /etc/systemd/system/airflow-scheduler.service
Добавь это:
[Unit] Description=Airflow scheduler daemon After=network.target postgresql-9.6.service Wants=postgresql-9.6.service [Service] RuntimeDirectory=airflow RuntimeDirectoryMode=0775 Type=simple ExecStart=/usr/bin/bash -c 'source /root/anaconda3/bin/activate ; airflow scheduler' Restart=always RestartSec=5s [Install] WantedBy=multi-user.target
И чтобы запустить и включить их:
systemctl enable airflow-scheduler.service systemctl start airflow-scheduler systemctl status airflow-scheduler journalctl -u airflow-scheduler
Подробнее об услугах systemd
можно прочитать здесь.
Спасибо за чтение! Я хотел бы услышать ваши мысли или комментарии. Пожалуйста, поделитесь статьей, если она вам понравилась. Ознакомьтесь с другими моими статьями здесь.