celery beat不执行

最近项目有用到异步任务,定时任务功能,就把celery集成到了项目,运行的时候,发现,异步任务可以正常运行,定时任务只运行一两次就不执行了。之前一直以为是时区的问题,改成utc时区也不行。后来看了celery的issues, 发现可能是celery, redis,kombu这3个包的版本不对应导致的。

有问题的版本的是:
celery: 5.5.0
kombu:5.5.3
redis: 6.2.0

尝试了多中配置,最后发现这个版本是好用的。
celery: 5.4.0
kombu: 5.5.3
redis: 5.0.5

备注:
1.如果celery, redis,kombu这3个包的版本没问题,定时任务还是执行一段时间后不执行,那就有可能是redis服务有问题,换个redis试试

使用Django和Celery Beat实现定期巡检,可按以下步骤进行: ### 安装依赖库并配置 在`settings.py`中进行配置,在`INSTALLED_APPS`里注册`django_celery_beat`和`django_celery_results`,同时修改时区`TIME_ZONE`和`USE_TZ`,并增加Celery相关配置。 ```python # settings.py INSTALLED_APPS = [ # ... 'django_celery_beat', 'django_celery_results', ] # 修改时区 TIME_ZONE = 'Asia/Shanghai' USE_TZ = True # Celery配置 CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'django-db' ``` ### 定义Celery应用 新增`celery.py`文件,实例化Celery应用。 ```python # celery.py from __future__ import absolute_import import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings') app = Celery('your_celery') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks() ``` ### 创建巡检任务 增加`tasks.py`文件,用于存放巡检任务。 ```python # tasks.py from celery import shared_task @shared_task def inspection_task(): # 这里编写巡检的具体逻辑 print("Performing inspection...") # 例如可以进行数据库检查、文件检查等 return "Inspection completed" ``` ### 配置定时任务 在`settings.py`中配置定时任务,指定巡检任务的执行时间。 ```python # settings.py from celery.schedules import crontab CELERY_BEAT_SCHEDULE = { 'inspection-task': { 'task': 'your_app.tasks.inspection_task', # 每天凌晨2点执行巡检任务 'schedule': crontab(hour=2, minute=0), }, } ``` ### 迁移数据库 迁移之后会生成几个表,用于存储定时任务相关信息。 ```bash python manage.py migrate ``` 生成的表包括: - `django_celery_beat.models.PeriodicTask`:此模型定义要运行的单个周期性任务。 - `django_celery_beat.models.IntervalSchedule`:以特定间隔(例如,每5秒)运行的计划。 - `django_celery_beat.models.CrontabSchedule`:与像在cron项领域的时间表(分钟、小时、日的一周、`DAY_OF_MONTH`、`month_of_year`)。 - `django_celery_beat.models.PeriodicTasks`:此模型仅用作索引以跟踪计划何时更改。 - `django_celery_beat_solarschedule`:根据太阳升起降落定制任务。 - `django_celery_beat_clockedschedule`:此模型存放已经关闭的任务。 ### 分别启动worker与beat 分别在同的命令窗口启动`worker`与`beat`,启动前需先进入Django项目的根目录(即与`manage.py`在同一目录下)。 ```bash # 启动beat,调度器使用数据库 celery -A your_project beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler # 启动worker celery worker -A your_project -l info ``` ### 其他创建任务的方式 除了在`settings.py`中配置定时任务,还可以通过Django-admin创建。 ```bash python manage.py createsuperuser ``` 创建好`admin`用户后,可手动创建定时任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值