与主管和virtualenv监督celerybeat

Gr1*_*r1N 13 python celery supervisord celerybeat

我的celerybeat.conf

[program:celerybeat]
command=/path/app/env/bin/celery beat -A project.tasks --loglevel=INFO
environment=PYTHONPATH=/path/app/env/bin

user=nobody
numprocs=1
stdout_logfile=/var/log/celeryd.log
stderr_logfile=/var/log/celeryd.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=true
priority=998
Run Code Online (Sandbox Code Playgroud)

当我启动主管时,我收到一个错误:

pidfile_fd = os.open(self.path, PIDFILE_FLAGS, PIDFILE_MODE)
celery.platforms.LockFailed: [Errno 13] Permission denied: '/celerybeat.pid'
Run Code Online (Sandbox Code Playgroud)

不知道怎么解决这个问题?

san*_*ora 14

问题是你没有在配置文件中指定任何目录,默认目录是'/'(root),你的用户没有权限写.

将用户设置为root可以解决您的问题,因为现在您有权写入'/',但它可能不是最佳解决方案.您可以通过多种方式解决此问题:

  1. 在配置中添加目录变量,并提供用户有权写入的路径.

    directory=<path>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为您用于启动celery的celery命令提供pidfile参数.确保您对为pidfile指定的路径具有写入权限.

    command=/path/app/env/bin/celery beat -A project.tasks --loglevel=INFO --pidfile=/tmp/celerybeat-myapp.pid
    
    Run Code Online (Sandbox Code Playgroud)


Gr1*_*r1N 0

我通过设置 user=root 解决了我的问题,但我认为这是不好的方法......

  • 不要那样做!尽可能少用 root。最好遵循 @sanchitarora 的答案,并将 pid 文件写入您有写入权限的目录中。`--pidfile=/tmp/celerybeat-myapp.pid` (4认同)