celery beat raised exception <class '_dbm.error'>: error('cannot add item to database',)错误解决方法

在一次重启python中的celery-beat任务中,发现celery-beat启动不起来了。报错信息如下:

celery beat v4.1.0 (latentcall) is starting.
__    -    ... __   -        _
LocalTime -> 2018-04-11 15:04:12
Configuration ->
    . broker -> redis://127.0.0.1:9736/4
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%WARNING
    . maxinterval -> 5.00 minutes (300s)
[2018-04-11 15:04:12,478: CRITICAL/MainProcess] beat raised exception <class '_dbm.error'>: error('cannot add item to database',)
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/kombu/utils/objects.py", line 42, in __get__
    return obj.__dict__[self.__name__]
KeyError: 'scheduler'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/shelve.py", line 111, in __getitem__
    value = self.cache[key]
KeyError: 'entries'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/celery/beat.py", line 485, in _create_schedule
    self._store[str('entries')]
  File "/usr/local/lib/python3.6/shelve.py", line 113, in __getitem__
    f = BytesIO(self.dict[key.encode(self.keyencoding)])
KeyError: b'entries'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/celery/apps/beat.py", line 107, in start_scheduler
    service.start()
  File "/usr/local/lib/python3.6/site-packages/celery/beat.py", line 549, in start
    humanize_seconds(self.scheduler.max_interval))
  File "/usr/local/lib/python3.6/site-packages/kombu/utils/objects.py", line 44, in __get__
    value = obj.__dict__[self.__name__] = self.__get(obj)
  File "/usr/local/lib/python3.6/site-packages/celery/beat.py", line 593, in scheduler
    return self.get_scheduler()
  File "/usr/local/lib/python3.6/site-packages/celery/beat.py", line 588, in get_scheduler
    lazy=lazy,
  File "/usr/local/lib/python3.6/site-packages/celery/beat.py", line 428, in __init__
    Scheduler.__init__(self, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/celery/beat.py", line 206, in __init__
    self.setup_schedule()
  File "/usr/local/lib/python3.6/site-packages/celery/beat.py", line 456, in setup_schedule
    self._create_schedule()
  File "/usr/local/lib/python3.6/site-packages/celery/beat.py", line 489, in _create_schedule
    self._store[str('entries')] = {}
  File "/usr/local/lib/python3.6/shelve.py", line 125, in __setitem__
    self.dict[key.encode(self.keyencoding)] = f.getvalue()
_dbm.error: cannot add item to database

解决办法:
1.删除启动目录中的celerybeat-schedule.db(我的项目地址为/data/www/master/project,在这目录下你发现有个 celerybeat-schedule.db文件,删除即可
2.再重新启动 ( celery beat -A project.celery_job )

原因:
当celerybeat启动的时候会带启动目录中生成 celerybeat-schedule.db作为数据存储的文件,当celerybeat异常关闭时,此文件没有被删除,在下一下启动的时候,被占用,导致_dbm.error: cannot add item to database错误。所以把文件删除就可以了


我想将frontend 也是用volumes,将其映射到/app/frontend目录,在/app/frontend下install以及build,如何实现 docker-compose.yml文件: version: '3' services: frontend: build: context: ./frontend dockerfile: Dockerfile ports: - 8010:80 restart: always backend: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: python manage.py runserver 0.0.0.0:8000 ports: - 8011:8000 restart: always celery-worker: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: celery -A server worker -l info --pool=solo --concurrency=1 depends_on: - redis - backend restart: always celery-beat: build: context: ./backend dockerfile: Dockerfile volumes: - /app/backend:/app environment: - CELERY_BROKER_URL=redis://redis:6379/0 command: celery -A server beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler depends_on: - redis - backend restart: always redis: image: redis:latest ports: - 6379:6379 restart: always mysql: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=sacfxSql258147@ ports: - 8016:3306 volumes: - ./mysql:/var/lib/mysql restart: always frontend:dockerfile文件 FROM node:16.18.1 WORKDIR /app/frontend COPY package*.json ./ RUN npm install COPY . . RUN npm run build:prod FROM nginx:latest COPY --from=0 /app/frontend/dist/ /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值