气流工作者守护程序退出没有明显的原因

时间:2018-04-09 21:58:47

标签: ubuntu systemd airflow worker

我在一个虚拟环境中运行Airflow 1.9,使用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时,返回提示需要一段时间,并且没有任何内容显示在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的方法都有效,除非我尝试守护它。甚至在-D命令工作后使用airflow标志(如airflow worker -D),除了我不确定这是否是在生产中使用它的正确/安全/推荐方式,并且而是使它成为一种服务并使用它。请帮忙。

1 个答案:

答案 0 :(得分:4)

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

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

User=airflow
Group=airflow