Airflow Worker Daemon 无故退出
Airflow Worker Daemon exits for no visible reason
我在虚拟环境中安装了 Airflow 1.9 运行ning,使用 Celery 和 Redis 进行设置并且运行良好。但是,我想对设置进行守护进程并使用了说明 here。它适用于 Webserver、Scheduler 和 Flower,但不适用于 Worker,这当然是这一切的核心。我的 airflow-worker.service
文件如下所示:
[Unit]
Description=Airflow celery worker 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/default/airflow
User=root
Group=root
Type=simple
ExecStart=/bin/bash -c 'source /home/codingincircles/airflow-master/bin/activate ; airflow worker'
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
奇怪的是,如果我按原样在 CLI 上 运行 ExecStart
命令,它 运行 可以完美地执行任务 运行 并且一切都很顺利。但是,当我执行 sudo service airflow-worker start
时,需要一段时间才能 return 提示,并且 Flower UI 中什么也没有显示。当我执行 journalctl -u airflow-worker.service -e
时,这是我看到的:
systemd[1]: Started Airflow celery worker daemon.
bash[12392]: [2018-04-09 21:52:41,202] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/Grammar.txt
bash[12392]: [2018-04-09 21:52:41,252] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/PatternGrammar.txt
bash[12392]: [2018-04-09 21:52:41,578] {configuration.py:206} WARNING - section/key [celery/celery_ssl_active] not found in config
bash[12392]: [2018-04-09 21:52:41,578] {default_celery.py:41} WARNING - Celery Executor will run without SSL
bash[12392]: [2018-04-09 21:52:41,579] {__init__.py:45} INFO - Using executor CeleryExecutor
systemd[1]: airflow-worker.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: airflow-worker.service: Unit entered failed state.
systemd[1]: airflow-worker.service: Failed with result 'exit-code'.
我做错了什么?任何其他使用 Airflow 的方法都有效,除非我尝试对其进行守护进程处理。即使在 airflow
命令后使用 -D
标志(如 airflow worker -D
),但我不确定这是否是在生产中使用它的 right/safe/recommended 方式并且会而是将其作为一项服务并使用它。请帮忙
您的 airflow-worker.service
正在尝试 运行 气流工作者作为 root
用户。为了 运行 airflow worker 作为 root,你必须在你的 airflow 环境文件 (/etc/default/airflow
) 中设置 C_FORCE_ROOT="true"
。但是,不推荐这样做,我怀疑这不是最适合您的解决方法。
尝试以 root 身份手动 运行 airflow worker 时,您应该会看到有关此的警告。因为您没有看到此警告,所以我怀疑您可以手动启动 worker 而不会出现问题,因为您 运行 将其作为正确配置的 airflow
用户而不是 root
。因此,推荐的解决方案是更改 airflow-worker.service
文件中的以下行:
User=airflow
Group=airflow
我在虚拟环境中安装了 Airflow 1.9 运行ning,使用 Celery 和 Redis 进行设置并且运行良好。但是,我想对设置进行守护进程并使用了说明 here。它适用于 Webserver、Scheduler 和 Flower,但不适用于 Worker,这当然是这一切的核心。我的 airflow-worker.service
文件如下所示:
[Unit]
Description=Airflow celery worker 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/default/airflow
User=root
Group=root
Type=simple
ExecStart=/bin/bash -c 'source /home/codingincircles/airflow-master/bin/activate ; airflow worker'
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
奇怪的是,如果我按原样在 CLI 上 运行 ExecStart
命令,它 运行 可以完美地执行任务 运行 并且一切都很顺利。但是,当我执行 sudo service airflow-worker start
时,需要一段时间才能 return 提示,并且 Flower UI 中什么也没有显示。当我执行 journalctl -u airflow-worker.service -e
时,这是我看到的:
systemd[1]: Started Airflow celery worker daemon.
bash[12392]: [2018-04-09 21:52:41,202] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/Grammar.txt
bash[12392]: [2018-04-09 21:52:41,252] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/PatternGrammar.txt
bash[12392]: [2018-04-09 21:52:41,578] {configuration.py:206} WARNING - section/key [celery/celery_ssl_active] not found in config
bash[12392]: [2018-04-09 21:52:41,578] {default_celery.py:41} WARNING - Celery Executor will run without SSL
bash[12392]: [2018-04-09 21:52:41,579] {__init__.py:45} INFO - Using executor CeleryExecutor
systemd[1]: airflow-worker.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: airflow-worker.service: Unit entered failed state.
systemd[1]: airflow-worker.service: Failed with result 'exit-code'.
我做错了什么?任何其他使用 Airflow 的方法都有效,除非我尝试对其进行守护进程处理。即使在 airflow
命令后使用 -D
标志(如 airflow worker -D
),但我不确定这是否是在生产中使用它的 right/safe/recommended 方式并且会而是将其作为一项服务并使用它。请帮忙
您的 airflow-worker.service
正在尝试 运行 气流工作者作为 root
用户。为了 运行 airflow worker 作为 root,你必须在你的 airflow 环境文件 (/etc/default/airflow
) 中设置 C_FORCE_ROOT="true"
。但是,不推荐这样做,我怀疑这不是最适合您的解决方法。
尝试以 root 身份手动 运行 airflow worker 时,您应该会看到有关此的警告。因为您没有看到此警告,所以我怀疑您可以手动启动 worker 而不会出现问题,因为您 运行 将其作为正确配置的 airflow
用户而不是 root
。因此,推荐的解决方案是更改 airflow-worker.service
文件中的以下行:
User=airflow
Group=airflow