Celery 作为服务 - PermissionError: [Errno 13] 权限被拒绝: '/var/run/celery'

问题描述 投票:0回答:4

我正在尝试创建一个运行

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"

如何让它发挥作用?

python linux permissions celery systemd
4个回答
8
投票

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

$sudo mkdir /var/run/celery

用户和组不一定必须是 celery..

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

然后

$sudo service celery restart

4
投票

将参数

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

中创建一个目录

2
投票

goodnews john的答案有效,但文件夹

/var/run/
将在重新启动时被清除。

要使其持久化,您可以在

/usr/lib/tmpfiles.d/
中添加文件,例如
/usr/lib/tmpfiles.d/celery.conf

将其写入文件:

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


1
投票

我也看到了同样的问题,结果发现我用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 工作程序以非 root 用户身份运行,假设
me
,因此
me
没有对
/var/log/celery
的写入/执行权限,因此它的权限被拒绝。

您可以在用户

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

© www.soinside.com 2019 - 2024. All rights reserved.