Настройте 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 можно прочитать здесь.

Спасибо за чтение! Я хотел бы услышать ваши мысли или комментарии. Пожалуйста, поделитесь статьей, если она вам понравилась. Ознакомьтесь с другими моими статьями здесь.