作为守护程序运行celery不会创建PID文件

时间:2016-06-02 07:42:51

标签: django celery daemon

过去几天我一直在绞尽脑汁,我已经看到了stackoverflow上的其他问题(因为这是一个重复的问题)而且我已经尝试了一切来完成这项工作,工作人员运行正常但是芹菜没有开始作为一个过程。

我运行命令:

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:没有发现pidfiles 错误是我需要解决的问题。

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

我正在Amazon Web Services上部署此脚本。我正在使用虚拟环境。

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文章创建芹菜用户。

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

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

CELERYD_USER = ""
CELERYD_GROUP = ""

同时还将DEFAULT_USER值更改为&#34;&#34;在init.d脚本中。 问题仍然存在。

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

  

PS:我已经指定,并且出于隐私问题   他们有自己的原名。

3 个答案:

答案 0 :(得分:4)

我的ubuntu服务器上出现了类似的问题[ERROR 2] FILE NOT FOUND。事实证明,即使您在celery示例文档中完成的celery.service配置中进行了设置,也不会自动创建/ var / run / celery /目录。您可以创建该目录并手动授予权限,但是重新启动服务器后,该目录将消失,因为该目录位于临时目录中。 在了解了Linux系统的运行方式后,我发现您只需要在/etc/tmpfiles.d/celery.conf中用以下几行创建配置文件

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

注意:您将需要使用'admin'以外的其他user:group,也可以专门创建一个名为admin的user:group来处理您的芹菜过程。

您可以通过输入

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

答案 1 :(得分:1)

我有问题并且刚才解决了,谢天谢地!对我来说这是一个许可问题。我原以为它在/ var / run / celery或/ var / log / celery中,但事实证明这是我设置Django登录的日志文件。出于某种原因,芹菜想要写入该文件(我必须查看),但没有许可。我在verbose命令中找到了错误并跳过了守护步骤:

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

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

祝你好运!

答案 2 :(得分:0)

我看到了同样的问题,结果证明是权限问题。 确保将芹菜运行的用户/组设置为拥有/ var / log / celery /和/ var / run / celery / folders。 请看这里的分步示例: Daemonizing celery