Django项目使用定时任务(django-crontab)
关于django-crontab定时任务,首先他是操作系统层面的定时任务,一旦激活启动,只要操作系统在运行,则定时任务会一直在后台运行。
定时任务可以使用在页面静态化技术上,以便按照我们想要的时间间隔自动生成页面
下面以Django项目页面静态化技术应用定时任务来进行举例:
首先安装
pip install django-crontab
添加应用
# settings.py
INSTALLED_APPS = [
...
# 定时任务
'django_crontab',
]
设置任务的定时开启时间
每个定时任务分为三部分定义:
- 任务时间
基本格式 :
* * * * *
分 时 日 月 周 命令
M: 分钟(0-59)。每分钟用*或者 */1表示
H:小时(0-23)。(0表示0点)
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
第一个星号代表分钟,第二个代表小时,第三个代表天,第四个代表月,第五个代表一星期内的第几天
注意:'1 * * * *' 代表每个小时的第一分钟执行定时任务,即,每小时才会更新一次。
我们如果要设置每分钟执行一次定时任务,则需要使用以下
'*/1 * * * *'
-
任务方法
-
任务日志
首页的定时任务设置如下:
# 在settings.py文件中
# 定时任务
CRONJOBS = [
# 每1分钟生成一次首页静态文件
('*/1 * * * *', 'contents.generate_index.generate_index_html', '>> ' + os.path.join(os.path.dirname(BASE_DIR), 'logs/crontab.log'))
]
- 第一部分代表了定时任务的执行间隔,第二部分代表定时任务要执行的函数,第三部分代表发生错误时了写入的日志文件路径和日志文件
解决中文字符问题
在定时任务中,如果出现非英文字符,会出现字符异常错误
可以通过在 settings.py 中添加如下命令来解决:
# 解决 crontab 中文问题
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
开启定时任务
我们设置好定时任务之后, 需要把定时任务添加到操作系统中才能够启动:
添加定时任务到系统中
python manage.py crontab add
执行以上代码会出现如下弹窗,点击 好,如果不小心点击错了,则要关机重启再来执行添加定时任务。
显示已经激活的定时任务
python manage.py crontab show
移除定时任务(当不使用的时候记得移除,否则会一直存在)
python manage.py crontab remove
补充:由于该定时任务是操作系统层面的定时任务,仅在linux操作系统和mac系统下可以执行,windows系统则不可用!