Celery因DBPageNotFoundError崩溃

8 投票
2 回答
3942 浏览
提问于 2025-04-18 12:13

我有三台机器,上面运行着celery工作进程,使用rabbitmq作为消息中介。其中一台工作进程是带有定时任务的(beat标志),这些都由supervisor来管理。有时候,celery会出现错误而崩溃。这个错误只在带有定时任务的工作进程上出现,但一旦出现,所有机器上的工作进程都会崩溃。

[2014-07-05 08:37:04,297: INFO/MainProcess] Connected to amqp://user:**@192.168.15.106:5672//
[2014-07-05 08:37:04,311: ERROR/Beat] Process Beat
Traceback (most recent call last):
File "/var/projects/env/local/lib/python2.7/site-packages/billiard/process.py", line 292, in _bootstrap
self.run()
File "/var/projects/env/local/lib/python2.7/site-packages/celery/beat.py", line 527, in run
self.service.start(embedded_process=True)
File "/var/projects/env/local/lib/python2.7/site-packages/celery/beat.py", line 453, in start
humanize_seconds(self.scheduler.max_interval))
File "/var/projects/env/local/lib/python2.7/site-packages/kombu/utils/__init__.py", line 322, in __get__
value = obj.__dict__[self.__name__] = self.__get(obj)
File "/var/projects/env/local/lib/python2.7/site-packages/celery/beat.py", line 491, in scheduler
return self.get_scheduler()
File "/var/projects/env/local/lib/python2.7/site-packages/celery/beat.py", line 486, in get_scheduler
lazy=lazy)
File "/var/projects/env/local/lib/python2.7/site-packages/celery/utils/imports.py", line 53, in instantiate
return symbol_by_name(name)(*args, **kwargs)
File "/var/projects/env/local/lib/python2.7/site-packages/celery/beat.py", line 357, in __init__
Scheduler.__init__(self, *args, **kwargs)
File "/var/projects/env/local/lib/python2.7/site-packages/celery/beat.py", line 184, in __init__
self.setup_schedule()
File "/var/projects/env/local/lib/python2.7/site-packages/celery/beat.py", line 376, in setup_schedule
self._store['entries']
File "/usr/lib/python2.7/shelve.py", line 121, in __getitem__
f = StringIO(self.dict[key])
File "/usr/lib/python2.7/bsddb/__init__.py", line 270, in __getitem__
return _DeadlockWrap(lambda: self.db[key])  # self.db[key]
File "/usr/lib/python2.7/bsddb/dbutils.py", line 68, in DeadlockWrap
return function(*_args, **_kwargs)
File "/usr/lib/python2.7/bsddb/__init__.py", line 270, in <lambda>
return _DeadlockWrap(lambda: self.db[key])  # self.db[key]
DBPageNotFoundError: (-30985, 'DB_PAGE_NOTFOUND: Requested page not found')

2 个回答

1

我需要删除一些临时文件,这些文件在 /tmp 这个文件夹里。其中一个文件叫 celeryd-<工作者名称>-状态,还有一个叫 celeryd-<工作者名称>-状态-重命名。删除了这些文件后,我就能重新启动受影响的工作者了。

12

我遇到了这个问题,原因是一个数据库文件损坏了(通常叫做“celerybeat-schedule”)。解决办法就是删除这个现有的数据库文件,然后重新启动这个进程。

相关信息:bsddb.db.DBPageNotFoundError https://mail.python.org/pipermail/python-list/2009-October/554552.html

撰写回答