气流工人守护程序没有明显原因退出

Cod*_*les 3 ubuntu worker systemd airflow

我的Airflow 1.9在虚拟环境中运行,并使用Celery和Redis进行了设置,并且运行良好。但是,我想守护设置并使用此处的说明。它适用于Web服务器,调度程序和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
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我ExecStart按原样在CLI上运行命令,则该命令可以完美运行,并且可以运行任务,并且一切都很光荣。但是,当我执行时sudo service airflow-worker start,需要一段时间才能返回提示,并且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'.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?使用Airflow的任何其他方法都可以使用,除非我尝试将其守护进程。甚至-Dairflow命令运行后使用标志(如airflow worker -D),除非我不确定这是否是在生产环境中使用它的正确/安全/推荐方式,而宁愿使其成为服务并使用它。请帮忙。

7yl*_*l4r 5

airflow-worker.service正在尝试以root用户身份运行气流工作者。为了以根用户身份运行airflow worker,必须C_FORCE_ROOT="true"在气流环境文件(/etc/default/airflow)中进行设置。但是,不建议这样做,我怀疑这不是您的最佳解决方案。

尝试以root用户身份手动运行airflow worker时,您应该看到关于此的警告。因为您没有看到此警告,所以我怀疑您可以手动启动工作程序而不会出现问题,因为您以正确配置的airflow用户身份(而不是以)运行它root。因此,建议的解决方案是更改airflow-worker.service文件中的以下几行:

User=airflow
Group=airflow
Run Code Online (Sandbox Code Playgroud)