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
时的值