Ошибка: / run / airflow не существует. Не могу создать pidfile. при использовании systemd для веб-сервера Airflow

Я настроил свою настройку Airflow для работы с systemd в соответствии с этим. Это было здорово в течение пары дней, но возникли некоторые ошибки, которые я не могу понять, как исправить. Запуск sudo systemctl start airflow-webserver.service на самом деле ничего не делает, но запуск airflow webserver работает (однако для наших целей необходимо использовать systemd).

Чтобы понять, в чем ошибка, я запускаю sudo systemctl status airflow-webserver.service, и он выдает следующий статус и ошибку:

Feb 20 18:54:43 ip-172-31-25-17.ec2.internal airflow[19660]: [2019-02-20 18:54:43,774] {models.py:258} INFO - Filling up the DagBag from /home/ec2-user/airflow/dags
Feb 20 18:54:43 ip-172-31-25-17.ec2.internal airflow[19660]: /home/ec2-user/airflow/dags/statcan_1410009501.py:33: SyntaxWarning: name 'pg_hook' is assigned to before global declaration
Feb 20 18:54:43 ip-172-31-25-17.ec2.internal airflow[19660]: global pg_hook
Feb 20 18:54:43 ip-172-31-25-17.ec2.internal airflow[19660]: /usr/lib/python2.7/site-packages/airflow/utils/helpers.py:346: DeprecationWarning: Importing 'PythonOperator' directly from 'airflow.operators' has been deprecated. Please import from 'airflow.operators.[operat...irely in Airflow 2.0.
Feb 20 18:54:43 ip-172-31-25-17.ec2.internal airflow[19660]: DeprecationWarning)
Feb 20 18:54:43 ip-172-31-25-17.ec2.internal airflow[19660]: /usr/lib/python2.7/site-packages/airflow/utils/helpers.py:346: DeprecationWarning: Importing 'BashOperator' directly from 'airflow.operators' has been deprecated. Please import from 'airflow.operators.[operator...irely in Airflow 2.0.
Feb 20 18:54:43 ip-172-31-25-17.ec2.internal airflow[19660]: DeprecationWarning)
Feb 20 18:54:44 ip-172-31-25-17.ec2.internal airflow[19660]: [2019-02-20 18:54:44,528] {settings.py:174} INFO - setting.configure_orm(): Using pool settings. pool_size=5, pool_recycle=1800
Feb 20 18:54:45 ip-172-31-25-17.ec2.internal airflow[19660]: [2019-02-20 18:54:45 +0000] [19733] [INFO] Starting gunicorn 19.9.0
Feb 20 18:54:45 ip-172-31-25-17.ec2.internal airflow[19660]: Error: /run/airflow doesn't exist. Can't create pidfile.

Планировщик работает нормально, что было подтверждено после запуска как systemctl status airflow-scheduler.service, так и journalctl -f.

Вот настройка следующих файлов systemd:

/usr/lib/systemd/system/airflow-webserver.service

[Unit]
Description=Airflow scheduler daemon
After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service
Wants=postgresql.service mysql.service redis.service rabbitmq-server.service

[Service]
EnvironmentFile=/etc/sysconfig/airflow
User=ec2-user
Type=simple
ExecStart=/bin/airflow scheduler
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

/etc/tmpfiles.d/airflow.conf

D /run/airflow 0755 airflow airflow

/ etc / sysconfig / airflow

AIRFLOW_CONFIG= $AIRFLOW_HOME/airflow.cfg
AIRFLOW_HOME= /home/ec2-user/airflow

До этой ошибки я переместил установку воздушного потока из корневого каталога в домашний. Не уверен, что это повлияло бы на мою настройку, но помещаю его здесь, если это актуально.

Может ли кто-нибудь объяснить ошибку и как ее исправить? Я изо всех сил старался настроить systemd как можно ближе к инструкциям, но, может быть, я что-то упускаю?

Изменить 2:

Извините, я вставил неправильный код. Итак, это мой код для airflow-webserver.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]
EnvironmentFile=/etc/sysconfig/airflow
User=ec2-user
Type=simple
ExecStart=/bin/airflow webserver --pid /run/airflow/webserver.pid
Restart=on-failure
RestartSec=5s
PrivateTmp=true

[Install]
WantedBy=multi-user.target

person Czarina Catambing    schedule 20.02.2019    source источник


Ответы (3)


Я тоже столкнулся с этой проблемой и смог решить ее, указав параметры каталога времени выполнения в [Service] в airflow-webserver.service файле модуля:

[Service]
RuntimeDirectory=airflow
RuntimeDirectoryMode=0775

Я не мог понять, как заставить его работать только с /etc/tmpfiles.d/airflow.conf.

person dstandish    schedule 23.02.2019
comment
@chorbs, не могли бы вы подробнее рассказать, почему это сработало для вас? - person Newskooler; 18.03.2019
comment
@Newskooler, это мой первый раз, когда я использую systemd, поэтому я знаю, что это эксперт, но я предполагаю, что это говорит systemd создать каталог / run / airflow с разрешениями 0775, и что если вы не укажете это, каталог не будет будут созданы или не будут созданы с достаточно разрешительными разрешениями - person dstandish; 19.03.2019
comment
Это именно то, что он делает. Это делает /etc/tmpfiles.d/airflow.conf лишним. Я не знаю, почему он не был добавлен в репозиторий воздушного потока вот так ... - person Newskooler; 19.03.2019
comment
Я добавил runtimeDirectoryMode в 775, но все равно получаю ту же ошибку - person naveen kumar; 17.08.2019
comment
вы также добавили RuntimeDirectory? - person dstandish; 17.08.2019

Файл конфигурации /etc/tmpfiles.d/airflow.conf используется службой systemd-tmpfiles-setup при загрузке. Итак, перезапуск сервера должен создать каталог / run / airflow. Невозможно просто перезапустить эту службу согласно https://github.com/systemd/systemd/issues/8684.

Как указано в приведенной выше ссылке, после копирования airflow.conf в /etc/tmpfiles.d/ просто запустите sudo systemd-tmpfiles --create, и должно быть создано /run/airflow.

person rubpa    schedule 26.07.2019

Похоже, вы запускаете планировщик, а не веб-сервер:

ExecStart=/bin/airflow scheduler

Вы можете сделать что-то вроде:

ExecStart=/bin/airflow webserver -p 8080 --pid /run/airflow/webserver.pid

Возможно, вы просто скопировали вставленный не тот файл, в этом случае поделитесь правильным (airflow-webserver.service), чтобы мы помогли вам устранить эту неполадку.

person Salvador Ribolzi    schedule 21.02.2019
comment
Извините, я вставил неправильный код. Я обновил это выше - person Czarina Catambing; 22.02.2019