django 定时任务
环境信息
- centos 7
- python 3.10
- django 4.0
- django-crontab
django-crontab 依赖 Linux 系统中的 crontab,因此只能在 Linux 系统中使用
安装 django-crontab
pip install django-crontab |
django-crontab 插件是以 app 的方式存在, 将 django-crontab 添加到 django 工程配置文件 settings.py 中的 INSTALLED_APPS
INSTALLED_APPS = [ |
配置定时任务
假设定时任务路径为 myapp.cron.scheduled_job
编写好定时任务后,要启用定时任务,需要在 django 工程配置文件 settings.py 中配置以下内容
CRONJOBS = [ |
如果定时任务需要参数,可以使用如下格式
CRONJOBS = [ |
以上定时任务,会将任务执行过程中的标准输出和标准错误输出写入到文件 run.log
也可以使用列表参数
CRONJOBS = [ |
其中,定时任务的第一部分(* * * * *),语法和 Linux 系统 crontab 一致,具体语法可参考: linux crontab 语法
配置好定时任务之后,执行以下命令添加定时任务
python3 manage.py crontab add |
运行定时任务
python3 manage.py crontab run |
运行定时任务后,会在系统 crontab 中追加一个定时任务,可使用 crontab -l 命令查看定时任务
crontab -l |
显示定时任务列表
python3 manage.py crontab show |
删除定时任务
python3 manage.py crontab remove b4564bdabd9dc |
注意事项:
CRONJOBS中配置的定时任务及所有参数不能有变量值,比如以下配置,在第二天时,不会再执行。settings.py
CRONJOBS = [
('0 7 * * *', 'myapp.cron.scheduled_job', '>> %s' time.time())
]因为,
CRONJOBS生成任务时,会生成对应的哈希值(hashes),标识每个任务。所以,当文件名变更时,CRONJOBS中的值每天都在变化,导致不同的定时任务哈希值(hashes)。而系统crontab定时任务中的任务哈希值还是第一次执行python3 manage.py crontab add时的值