【问题标题】:Permission denied error with django-celery-beat despite --schedulers flag尽管有 --schedulers 标志,但 django-celery-beat 的权限被拒绝错误
【发布时间】:2020-08-01 02:05:39
【问题描述】:

我在 Docker 容器中运行 Django、Celery 和 RabbitMQ。

一切都已配置好并且正在运行,但是当我尝试安装 django-celery-beat 时,我在初始化服务时遇到了问题。

具体来说,这个命令:

celery -A project beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

导致此错误:

celery.platforms.LockFailed: [Errno 13] Permission denied: '/usr/src/app/celerybeat.pid'

查看原因/解决方案时,当默认调度程序 (celery.beat.PersistentScheduler) 尝试跟踪本地搁置数据库文件中的最后运行时间并且没有写入权限时,似乎会发生权限被拒绝错误。

但是,我使用django-celery-beat 并应用--scheduler 标志来使用django_celery_beat.schedulers 服务,该服务应该将计划存储在Django 数据库中,因此不需要写入权限。

还有什么可能导致这个问题? / 如何进一步调试?

【问题讨论】:

    标签: django docker celery celerybeat django-celery-beat


    【解决方案1】:

    celerybeat (celery.bin.beat) 创建一个 pid 文件并在其中存储进程 ID

    --pidfile
    

    用于存储进程 pid 的文件。默认为 celerybeat.pid。

    如果此文件已存在且 pid 为 还活着。

    您可以在命令中将--pidfile= 留空,但请注意,它不会知道是否有多个 celerybeat 进程处于活动状态

    【讨论】:

    • 谢谢,我想如果您将调度程序更改为django_celery_beat.schedulers:DatabaseScheduler,那么它不会创建PID,因为它使用数据库来编写运行时间?我是否误解了 PID 的用途?
    • pid 是进程名称,pid 文件不允许运行多个相同的 celery beat(假设您运行命令 2 次),这会导致任务倍增。与实际任务运行或任务调度无关。
    • 谢谢,所以在 docker 环境中,我认为最佳做法是使用 pidfile?如果它在/usr/src/app/celerybeat.pid 中,它不应该已经具有写访问权限吗?如果文件以前不存在,我不确定如何在 celery 被证实后修改权限。
    • 您可能希望将您选择的文件夹的写入权限授予 celery 并将该文件夹添加为 --pidfile
    猜你喜欢
    • 2022-01-02
    • 2021-03-04
    • 2011-06-11
    • 2015-04-23
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2014-01-27
    相关资源
    最近更新 更多