芹菜即服务 - 权限错误: [错误 13] 权限被拒绝: '/var/run/celery'



我试图创建一个运行celery的服务,但我遇到了权限问题。我在许多教程中看到pidfile路径是/var/run/celery/%n.pid,但似乎我的用户没有权限写run

当我启动服务时,它返回的是:

PermissionError: [Errno 13] Permission denied: '/var/run/celery' 

celery.service

[Unit]
Description=Celery Service
After=network.target
[Service]
Type=forking
User=master
Group=master
EnvironmentFile=/etc/conf.d/celery
WorkingDirectory=/home/master/myproject/
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} 
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} 
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} 
--pidfile=${CELERYD_PID_FILE}'
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} 
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} 
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
[Install]
WantedBy=multi-user.target

celery.conf

CELERYD_NODES="celery-worker"
CELERY_BIN="/home/master/.virtualenvs/myproject/bin/celery"
# App instance to use
CELERY_APP="myproject"

CELERYD_MULTI="multi"
# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=3"
# %n will be replaced with the first part of the nodename.
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_LEVEL="INFO"

如何让它工作?

我不知道这是不是最好的方法,但我是这样解决我的问题的。

$sudo mkdir /var/run/celery

用户和组不必是芹菜..

$sudo chown -R celery:celery /var/run/celery
$sudo chmod o+w /var/run/celery

$sudo service celery restart

好消息john的答案有效,但是文件夹/var/run/将在重新启动时被清除。

为了使其持久,您可以在/usr/lib/tmpfiles.d/中添加一个文件,例如/usr/lib/tmpfiles.d/celery.conf


d /var/run/celery 0755 <your_user> <your_group>

将参数RuntimeDirectory=celery添加到celery.service文件中RuntimeDirectory命令会自动在/var/run/

目录下创建一个目录。

我看到了同样的问题,结果是我用root权限创建了/var/log/celery/var/run/celery,它看起来像这样

drwxr-xr-x 2 root root 6 Aug  4 09:40 /var/log/celery

但是我在/etc/default/celeryd中指定了我的celeryd worker作为一些非root用户运行,假设me,所以me没有对/var/log/celery的写/执行权限,所以它得到了权限拒绝。

您可以在用户mastermaster下创建您的/var/log/celery目录,或者授予用户master写/执行权限(简单地运行chmod o+w /var/log/celery可能不安全,尽管我在测试中做了,希望它能工作。

相关内容

  • 没有找到相关文章

最新更新