celerybeat 报错 DBFileExistsError

本文介绍了一个常见的Celery Beat错误——DBFileExistsError,并提供了详细的解决步骤。当Celery Beat尝试创建已存在的数据库文件时,会触发此错误。解决方案包括删除引发错误的文件并重新启动Celery Beat。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

celerybeat 报错 DBFileExistsError

环境

  • python2.7
  • celery==4.0.1

报错信息

[2018-05-02 13:55:02,346: WARNING/MainProcess] return self.get_scheduler()
[2018-05-02 13:55:02,346: WARNING/MainProcess] File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 567, in get_scheduler
[2018-05-02 13:55:02,346: WARNING/MainProcess] lazy=lazy,
[2018-05-02 13:55:02,346: WARNING/MainProcess] File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 407, in __init__
[2018-05-02 13:55:02,347: WARNING/MainProcess] Scheduler.__init__(self, *args, **kwargs)
[2018-05-02 13:55:02,347: WARNING/MainProcess] File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 204, in __init__
[2018-05-02 13:55:02,347: WARNING/MainProcess] self.setup_schedule()
[2018-05-02 13:55:02,347: WARNING/MainProcess] File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 433, in setup_schedule
[2018-05-02 13:55:02,347: WARNING/MainProcess] self._store = self._destroy_open_corrupted_schedule(exc)
[2018-05-02 13:55:02,347: WARNING/MainProcess] File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 421, in _destroy_open_corrupted_schedule
[2018-05-02 13:55:02,347: WARNING/MainProcess] return self._open_schedule()
[2018-05-02 13:55:02,347: WARNING/MainProcess] File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 415, in _open_schedule
[2018-05-02 13:55:02,348: WARNING/MainProcess] return self.persistence.open(self.schedule_filename, writeback=True)
[2018-05-02 13:55:02,348: WARNING/MainProcess] File "/usr/local/lib/python2.7/shelve.py", line 243, in open
[2018-05-02 13:55:02,348: WARNING/MainProcess] return DbfilenameShelf(filename, flag, protocol, writeback)
[2018-05-02 13:55:02,348: WARNING/MainProcess] File "/usr/local/lib/python2.7/shelve.py", line 227, in __init__
[2018-05-02 13:55:02,348: WARNING/MainProcess] Shelf.__init__(self, anydbm.open(filename, flag), protocol, writeback)
[2018-05-02 13:55:02,348: WARNING/MainProcess] File "/usr/local/lib/python2.7/anydbm.py", line 85, in open
[2018-05-02 13:55:02,348: WARNING/MainProcess] return mod.open(file, flag, mode)
[2018-05-02 13:55:02,348: WARNING/MainProcess] File "/usr/local/lib/python2.7/dbhash.py", line 18, in open
[2018-05-02 13:55:02,349: WARNING/MainProcess] return bsddb.hashopen(file, flag, mode)
[2018-05-02 13:55:02,349: WARNING/MainProcess] File "/usr/local/lib/python2.7/bsddb/__init__.py", line 364, in hashopen
[2018-05-02 13:55:02,349: WARNING/MainProcess] d.open(file, db.DB_HASH, flags, mode)
[2018-05-02 13:55:02,349: WARNING/MainProcess] bsddb.db
[2018-05-02 13:55:02,349: WARNING/MainProcess] .
[2018-05-02 13:55:02,349: WARNING/MainProcess] DBFileExistsError
[2018-05-02 13:55:02,349: WARNING/MainProcess] :
[2018-05-02 13:55:02,349: WARNING/MainProcess] (17, 'File exists -- __fop_file_setup:  Retry limit (100) exceeded')

通过查看celery代码,知道大概原因:

celery beat 在启动的时回去创建存储定时任务信息的数据库(参见shelve模块),但是该文件已存在,所以导致启动beat的时候报错, 解决办法是将该文件删除,然后重启beat即可。

db 文件为celerybeat-schedule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值