Skip to content

定时任务

使用说明

主界面

  • 任务状态:分为暂停和开启
  • 处理器的参数:可选。格式示例{'a':1,'b':2}

image-20250622100527026

  • 处理器名字:对应APP中定义的Celery任务。例如:myapp_infra.tasks.send_daily_report对应文件mysite\myapp_infra\tasks.py中的send_daily_report

image-20250622101143571

  • CRON表达式:Linux的CRON表达式。CRON表达式由 5 个时间字段组成。
sh
分钟 小时 日期 月份 星期  
*    *    *    *    *

CRON表达式可以直接让豆包等生成。例如

image-20250622101812760

执行一次

点击更多——执行一次,会触发立即执行一次该任务。无论该任务的状态是开启还是暂停。

image-20250622102513310

任务详细

点击更多——任务详细

  • 可以看到定时任务详细信息
  • 可以看到根据Cron表达式和当前时间,计算出来的后续执行时间

image-20250622102809150

调度日志

点击更多——调试日志,可以查看该任务的历史执行记录

image-20250622171601642

后端实现

目录

代码目录:

  • mysite\myapp_infra\job:定时任务
  • mysite\myapp_infra\job_log:定时任务的调试日志

实现

定时任务实现依赖下面组件

  • celery:分布式任务队列框架
  • redis:Celery 的消息中间件
  • django-celery-beat:Django 集成的定时任务调度器
  • django-celery-results:Django 集成的任务结果存储

启动Celery服务:在VSCode打开两个终端,进入根目录(包含manage.py文件的目录)分别执行

sh
# 启动celery worker
celery -A mysite worker -l INFO -P solo

# 启动celery beat
celery -A mysite beat -l INFO

TIP

使用定时任务之前,请先按上面命令启动Celery服务。

Celery相关配置

  • 文件mysite\mysite\settings.py
    • INSTALLED_APPS中已添加django_celery_beatdjango_celery_results
    • 已添加的Celery配置如下

image-20250622180557598

  • 文件mysite\mysite\celery.py:定义和配置 Celery 实例

image-20250622180859773

  • 应用APP下的tasks.py文件:用于定义Celery任务。例如mysite\myapp_infra\tasks.py文件

image-20250622181230170

添加定时任务步骤

步骤:

  • 在应用APP下的tasks.py文件中,定义定时任务。例如mysite\myapp_infra\tasks.py文件

image-20250622181548423

  • 在定时任务主界面,添加定时任务

image-20250622181704575

  • 启动Celery服务。如果Celery服务之前已启动,则重启Celery服务。

Celery 监控

Celery Flower 是一个用于监控和管理 Celery 任务的开源 Web 应用程序,它提供了实时的任务状态监控、任务执行图表、工作者信息、任务追踪和任务日志等功能。

Celery Flower 服务启动命令:在VSCode打开终端,进入根目录(包含manage.py文件的目录)执行

sh
# 启动celery 监控(可选)
celery -A mysite flower --port=5555

访问 http://localhost:5555 查看任务状态

  • 点击 Tasks 查看当前及后来的任务(不会显示以前的任务)。另外,通过观察任务列表的变化,判断 Celery Beat 的状态是否正常。

image-20250525110933420

  • 点击 Workers 查看 Celery Worker 状态

image-20250525113618659

  • 点击 Broker 查看 Redis 状态

image-20250525113632394

前端实现

目录

代码目录:src\views\infra\job

sh
job
├── JobDetail.vue # 任务详细
├── JobForm.vue # 新增/修改
├── index.vue # 定时任务主页
└── logger # 定时任务调度日志
    ├── JobLogDetail.vue
    └── index.vue