Я пытаюсь запустить airflow на сервере Ubuntu с systemd .Я следовал краткому руководству и руководству из документации по воздушному потоку, и мне удалось установить воздушный поток и успешно запустить его с помощью команды:
airflow webserver -p 8080
После установки systemd и большого количества проб и ошибок с помощью файлы конфигурации Мне удалось запустить поток воздуха с помощью команды
sudo systemctl start airflow
Поток воздуха продолжался в течение недели, пока сегодня я не перезапустил его с помощью команды
sudo systemctl restart airflow
Запускsudo systemctl status airflow
теперь дает мне одно из следующих двух сообщений:
● airflow.service - Airflow webserver daemon
Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Wed 2018-09-12 09:23:01 UTC; 1s ago
Process: 3115 ExecStart=/opt/miniconda3/bin/airflow webserver -p 8080 --pid /home/user/airflow/airflow-webserver.pid --daemon (code=exited, status=1/FAILURE)
Main PID: 3115 (code=exited, status=1/FAILURE)
Sep 12 09:23:01 server-service systemd[1]: airflow.service: Main process exited, code=exited, status=1/FAILURE
Sep 12 09:23:01 server-service systemd[1]: airflow.service: Unit entered failed state.
Sep 12 09:23:01 server-service systemd[1]: airflow.service: Failed with result 'exit-code'.
или
● airflow.service - Airflow webserver daemon
Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-09-12 09:23:54 UTC; 1s ago
Main PID: 3399 (airflow)
Tasks: 1
Memory: 56.1M
CPU: 1.203s
CGroup: /system.slice/airflow.service
└─3399 /opt/miniconda3/bin/python /opt/miniconda3/bin/airflow webserver -p 8080 --pid /home/user/airflow/airflow-webserver.pid --daemon
Sep 12 09:23:54 server-service systemd[1]: Stopped Airflow webserver daemon.
Sep 12 09:23:54 server-service systemd[1]: Started Airflow webserver daemon.
Sep 12 09:23:54 server-service airflow[3399]: [2018-09-12 09:23:54,372] {__init__.py:57} INFO - Using executor SequentialExecutor
Sep 12 09:23:55 server-service airflow[3399]: ____________ _____________
Sep 12 09:23:55 server-service airflow[3399]: ____ |__( )_________ __/__ /________ __
Sep 12 09:23:55 server-service airflow[3399]: ____ /| |_ /__ ___/_ /_ __ /_ __ \_ | /| / /
Sep 12 09:23:55 server-service airflow[3399]: ___ ___ | / _ / _ __/ _ / / /_/ /_ |/ |/ /
Sep 12 09:23:55 server-service airflow[3399]: _/_/ |_/_/ /_/ /_/ /_/ \____/____/|__/
Sep 12 09:23:55 server-service airflow[3399]:
Sep 12 09:23:55 server-service airflow[3399]: [2018-09-12 09:23:55,124] [3399] {models.py:167} INFO - Filling up the DagBag from /root/airflow/dags
Я думаю, что первое сообщение возвращается, когда systemd не удалось запустить поток воздуха, и второе сообщениевозвращается, когда systemd все еще находится в процессе запуска воздушного потока.
Так как первое сообщение об ошибке содержит airflow.service: Service hold-off time over, scheduling restart.
Я думал, что у меня может быть эта проблема , но запуск sudo systemctl enable airflow.service
не решает проблему (я думаю, что airflow.service включен в любом случаекак указано здесь: Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled)
).
При попытке решить проблему я обнаружил некоторые странные вещи, которые мне не понятны:
Согласно Страница быстрого запуска airflow , запуск airflow вручную создаст файл с именем airflow-webserver.pid
в homeflow air, в то время как запуск airflow с помощью systemd создаст файл с именем webserver.pid
в каталоге /run/airflow
.Первоначально, когда я попытался запустить поток воздуха с помощью systemd, я заметил, что /run/airflow/webserver.pid
не был создан.Установка PIDFile=/home/user/airflow/airflow-webserver.pid
решила проблему;система запускала поток воздуха с рабочим pid, указанным в файле airflow-webserver.pid
.Но теперь, когда я запустил sudo systemctl restart airflow
, это больше не работает;запуск airflow webserver -p 8080
не создает airflow-webserver.pid
, на который я указывал.
Поскольку запуск airflow больше не создает автоматически файлы /run/airflow/webserver.pid
или /home/user/airflow/airflow-webserver.pid
, я пытался их создатьвручную в нужных каталогах.Но если я запускаю airflow с systemd после создания файла /run/airflow/webserver.pid
, он удаляется (и не заменяется), и если я запускаю airflow вручную с airflow webserver -p 8080
после создания файла /run/airflow/webserver.pid
, тогда этот файл
Мой airflow.service
файл выглядит следующим образом:
[Unit]
Description=Airflow webserver daemon
After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service
[Service]
EnvironmentFile=/etc/sysconfig/airflow
PIDFile=/home/user/airflow/airflow-webserver.pid
User=%i
Group=%i
Type=simple
ExecStart=/opt/miniconda3/bin/airflow webserver -p 8080 --pid /home/user/airflow/airflow-webserver.pid --daemon
Restart=on-failure
RestartSec=5s
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Вопрос: Как мне решить эти проблемы, чтобы яможно запустить поток воздуха с помощью systemd?
Редактировать: После повторного перезапуска демона systemd мне удалось запустить поток воздуха (или, по крайней мере, так кажется).Запуск systemctl status airflow
возвращает:
● airflow.service - Airflow webserver daemon
Loaded: loaded (/lib/systemd/system/airflow.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-09-12 10:49:17 UTC; 6min ago
Main PID: 30054
Tasks: 0
Memory: 388.0K
CPU: 2.987s
CGroup: /system.slice/airflow.service
Sep 12 10:49:22 server-service airflow[30031]: File "/opt/miniconda3/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
Sep 12 10:49:22 server-service airflow[30031]: reraise(type(exception), exception, tb=exc_tb, cause=cause)
Sep 12 10:49:22 server-service airflow[30031]: File "/opt/miniconda3/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 186, in reraise
Sep 12 10:49:22 server-service airflow[30031]: raise value.with_traceback(tb)
Sep 12 10:49:22 server-service airflow[30031]: File "/opt/miniconda3/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
Sep 12 10:49:22 server-service airflow[30031]: context)
Sep 12 10:49:22 server-service airflow[30031]: File "/opt/miniconda3/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
Sep 12 10:49:22 server-service airflow[30031]: cursor.execute(statement, parameters)
Sep 12 10:49:22 server-service airflow[30031]: sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: connection [SQL: 'SELECT connection.conn_id AS connection_conn_id \nFROM connection G
Sep 12 10:49:23 server-service systemd[1]: airflow.service: Supervising process 30054 which is not our child. We'll most likely not notice when it exits.
lines 1-19/19 (END)
К сожалению, я не могу получить доступ к воздушному потоку в своем браузере.Более того, запуск воздушного потока с помощью systemd или вручную не приводит к файлам желаний /run/airflow/webserver.pid
и /home/user/airflow/airflow-webserver.pid
.Я пытался проверить, существуют ли они в другом месте с помощью sudo find ~/ -type f -name "webserver.pid"
, но это ничего не возвращает.
Я думаю, что сообщение Supervising process 30054 which is not our child. We'll most likely not notice when it exits.
как-то связано с моей проблемой, так как оно не получило этосообщение об успешном запуске воздушного потока с помощью systemd в прошлом.Может ли быть так, что systemctl status airflow
указывает, что воздушный поток работал в течение 6 минут, потому что systemd не замечает, что работник с pid 30054 больше не активен?
Edit 2: У меня естьвыяснил, почему airflow-webserver.pid
"не создается" потоком воздуха.Когда вы запускаете airflow webserver -p 8080
airflow создает файл .pid, но при остановке веб-сервера systemd снова удаляет файл .pid (если airflow не делает этого сам).Это объясняет, почему airflow-webserver.pid
не было там, но не объясняет, почему webserver.pid
не находится в каталоге /run/airflow
.