Mil*_*ano 6 python linux permissions celery systemd
我正在尝试创建一个可以运行的服务celery,但遇到了权限问题。我在许多教程中看到 pidfile 路径是,/var/run/celery/%n.pid但似乎我的用户无权写入run.
当我启动服务时,它返回的是:
PermissionError: [Errno 13] Permission denied: '/var/run/celery'
Run Code Online (Sandbox Code Playgroud)
芹菜服务
[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
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
如何让它发挥作用?
小智 8
不知道这是否是最好的方法,但这是我解决问题的方法......
$sudo mkdir /var/run/celery
Run Code Online (Sandbox Code Playgroud)
用户和组不一定必须是 celery..
$sudo chown -R celery:celery /var/run/celery
Run Code Online (Sandbox Code Playgroud)
$sudo chmod o+w /var/run/celery
Run Code Online (Sandbox Code Playgroud)
进而
$sudo service celery restart
Run Code Online (Sandbox Code Playgroud)
小智 1
我看到了同样的问题,结果发现我创建/var/log/celery并/var/run/celery具有root权限,它看起来像这样
drwxr-xr-x 2 root root 6 Aug 4 09:40 /var/log/celery
Run Code Online (Sandbox Code Playgroud)
但我在/etc/default/celeryd我的 celeryd 工作程序中指定以某个非 root 用户身份运行,假设me,因此me没有写入/执行权限/var/log/celery,因此它的权限被拒绝。
您可以/var/log/celery在用户master组下创建目录master或向用户授予写入/执行权限master(简单地运行chmod o+w /var/log/celery可能不安全,尽管我在测试中做了,希望它有效。