【问题标题】:Running celery as daemon does not create PID file将 celery 作为守护进程运行不会创建 PID 文件
【发布时间】:2016-10-01 19:42:07
【问题描述】:

自从过去几天以来,我一直在为此绞尽脑汁,我在 stackoverflow 上看到了其他问题(因为这是一个重复的问题),我已经尝试了一切来完成这项工作,工人们运行良好,但 celery没有作为一个进程启动。

我运行命令:

sudo service celeryd start

我得到:

celery init v10.1.
Using config script: /etc/default/celeryd
celery multi v3.1.23 (Cipater)
> Starting nodes...
    > worker1@ip-172-31-21-215: OK

我跑:

sudo service celeryd status

我得到:

celery init v10.1.
Using config script: /etc/default/celeryd
celeryd down: no pidfiles found

celeryd down: no pidfiles found 错误是我需要解决的。

我知道这个问题是重复的,但我仍然同意这个问题,因为我已经尝试了所有这些问题,但仍然无法解决。

我正在亚马逊网络服务上部署这个脚本。我正在使用虚拟环境。

init.d 脚本直接取自 here,然后我给了它所需的权限。

这是我的配置文件:

# Names of nodes to start
#   most people will only start one node:
CELERYD_NODES="worker1"
#   but you can also start multiple and configure settings
#   for each in CELERYD_OPTS (see `celery multi --help` for examples):
#CELERYD_NODES="worker1 worker2 worker3"
#   alternatively, you can specify the number of nodes to start:
#CELERYD_NODES=10

# Absolute or relative path to the 'celery' command:
# CELERY_BIN="/usr/local/bin/celery"
CELERY_BIN="/home/<user>/.virtualenvs/<virtualenv_name>/bin/celery"

# App instance to use
# comment out this line if you don't use an app
# CELERY_APP="proj"
# or fully qualified:
CELERY_APP="<project_name>.settings:app"

# Where to chdir at start.
CELERYD_CHDIR="/home/<user>/projects/<project_name>/"

# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"

# %N will be replaced with the first part of the nodename.
CELERYD_LOG_FILE="/var/log/celery/%N.log"
CELERYD_PID_FILE="/var/run/celery/%N.pid"

# Workers should run as an unprivileged user.
#   You need to create this user manually (or you can choose
#   a user/group combination that already exists, e.g. nobody).
CELERYD_USER="celery"
CELERYD_GROUP="celery"

# If enabled pid and log directories will be created if missing,
# and owned by the userid/group configured.
CELERY_CREATE_DIRS=1

我已经使用this文章创建了celery用户。

我的项目是一个 Django 项目,我在 celery 设置文件中指定了 DJANGO_SETTINGS_MODULE 环境变量,如 documentation 和 stackoverflow answer 中指定的那样。

我是否需要更改 init.d 脚本中的任何内容或需要在 celery 配置文件中添加的任何其他内容...是否与我创建的 celery 用户有关,因为我也尝试指定

CELERYD_USER = ""
CELERYD_GROUP = ""

同时在init.d 脚本中将DEFAULT_USER 的值更改为“”。 问题仍然存在。

在其中一个答案中还被告知项目中可能存在一些错误......但是由于我的测试用例,我没有发现任何此类错误。

PS:我已经指定了,为了隐私问题 他们有他们原来的名字。

【问题讨论】:

  • 我也遇到了同样的问题。有时似乎遵循文档会将您带到这里。
  • 在我的虚拟环境中从4.14.2 更新我的芹菜版本似乎已经解决了这个问题。

标签: django celery daemon


【解决方案1】:

我看到了同样的问题,结果证明是权限问题。 确保将运行 celery 的用户/组设置为拥有 /var/log/celery/ 和 /var/run/celery/ 文件夹。 有关分步示例,请参见此处: Daemonizing celery

【讨论】:

    【解决方案2】:

    我遇到了这个问题,刚刚解决了,感谢上帝!对我来说,这是一个许可问题。我原以为它会在 /var/run/celery 或 /var/log/celery 中,但事实证明这是我设置 Django 日志记录的日志文件。出于某种原因,celery 想要写入该文件(我必须查看该文件)但没有权限。我发现了详细命令的错误并跳过了守护进程:

    # C_FAKEFORK=1 sh -x /etc/init.d/celeryd start 
    

    这是一个旧线程,但如果你们中的任何人遇到此错误,我希望这可能会有所帮助!

    祝你好运!

    【讨论】:

      【解决方案3】:

      我在我的 ubuntu 服务器上遇到了类似的问题 [错误 2] 未找到文件。事实证明,/var/run/celery/ 目录不会自动创建,即使您在 celery 示例文档中完成的 celery.service 配置中进行了设置。您可以创建该目录,并手动授予正确的权限,但是一旦您重新启动服务器,该目录就会消失,因为它位于临时目录中。 在阅读了一些关于 linux 系统是如何运行的之后,我发现你只需要在 /etc/tmpfiles.d/celery.conf 中使用这些行创建一个配置文件

      d /var/run/celery 0755 admin admin -
      d /var/log/celery 0755 admin admin -                                       
      

      注意:您将需要使用“admin”以外的其他用户:组,或者您可以创建一个名为 admin 的用户:组专门用于处理您的 celery 进程。

      您可以通过键入

      了解有关此配置及其操作方式的更多信息
      man tmpfiles.d
      

      【讨论】:

      • 我不相信你需要第二行
      • 谢谢!我有一个名为“web”的用户,我用它代替了“admin”。这解决了我重新启动时文件消失的问题。我还学到了很多关于tmpfiles.d 的知识。有趣的东西。无论如何,谢谢!
      猜你喜欢
      • 2016-06-27
      • 2017-04-21
      • 2014-10-20
      • 2014-04-26
      • 2018-07-27
      • 1970-01-01
      • 2023-03-02
      • 2022-09-27
      • 2016-10-07
      相关资源
      最近更新 更多