ubuntu - Airflow Worker Daemon 无故退出

标签 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 的方法都有效,除非我尝试对其进行守护进程处理。即使在 airflow 命令工作后使用 -D 标志(如 airflow worker -D),除了我不确定那是否是在生产中使用它的正确/安全/推荐的方式,宁愿使它成为一种服务并使用它。请帮忙。

最佳答案

您的 airflow-worker.service 正在尝试以 root 用户身份运行 airflow worker。为了以 root 身份运行 airflow worker,您必须在您的 airflow 环境文件 (/etc/default/airflow) 中设置 C_FORCE_ROOT="true"。但是,不推荐这样做,我怀疑这不是最适合您的解决方法。

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

User=airflow
Group=airflow

关于ubuntu - Airflow Worker Daemon 无故退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49742296/

相关文章:

docker - 在 docker 容器中启动服务失败,错误 : Failed to get D-Bus connection: No connection to service manager

airflow - 了解 Airflow 中的 `None` 调度预设

无论下游发生什么情况,Airflow 任务都会运行

linux - centos 7 用脚本替换systemd

linux - 我无法从 Linux 中删除 AWS-CDK

gcc/ld 链接时不遵循符号链接(symbolic link)文件

linux - 谁在 Linux 中调用 calloc() 时清零页面?

ruby-on-rails - 如何让 systemd 使用 Puma 重启 Rails App

Airflow 调度器卡住

ubuntu - 从 Web 应用程序本地存储和提供用户上传的图像文件