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