我试图创建一个运行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.targetcelery.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"怎么让它起作用?
发布于 2021-08-04 09:52:13
我看到了同样的问题,结果是我用根特权创建了/var/log/celery和/var/run/celery,它看起来如下
drwxr-xr-x 2 root root 6 Aug 4 09:40 /var/log/celery但是我在/etc/default/celeryd中指定我的celeryd工作人员作为某个非根用户运行,假设是me,因此me没有对/var/log/celery的写/执行权限,因此它被拒绝了权限。
您可以在user master组master下创建您的chmod o+w /var/log/celery目录,也可以将写/执行授予用户master (简单地运行chmod o+w /var/log/celery可能是不安全的,尽管我在测试中这样做了,希望它成功了。
https://stackoverflow.com/questions/66172503
复制相似问题