django 定时任务 django-crontab 的使用
成功例子如下图:
1、前言
在做 django 开发需求时,多多少少都会遇到需要定时任务的功能,比如定时执行任务,检查订单之类的。可能是一段时间,比如每隔 10分钟执行一次,也可能是定点时间,比如 14:00 执行,也可能是长时间,比如每周几,每个月的哪一天等。查看了一下相关资料, django 定时任务 django-crontab
库比较多教程和资料,虽然 star 数才五百,但是 API 接口比较简单,接入也很方便,功能也很全面,当然,也存在一此无法解决的问题,使用时需要注意的。
2、使用教程
1.安装:
pip install django-crontab
2.添加配置到 settings.py INSTALLED_APPS
中
INSTALLED_APPS = (
'django_crontab',
...
)
3.编写定时函数:
定时任务可以分成两种,一种是执行自定义的mange.py的命令,另一种是执行自定义函数。
在django的app中新建一个myapp/cron.py文件,把需要定时执行的代码放进去
示例:
def my_scheduled_job():
pass
4.在 settings.py 中增加CRONJOBS
配置
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.my_scheduled_job')
]
也可以定义一些关键字参数,有2种格式:
格式1:
- 要求:cron计时通常格式(有关更多示例,请参阅 Wikipedia 和 crontab.guru)
- 要求:python模块路径下待执行定时任务
- 可选:特定于定时任务的后缀(例如,将
out/err
重定向到文件,默认值为'')
示例:
CRONJOBS = [
('*/1 * * * *', 'appname.test_crontab.test','>>/home/python/test_crontab.log')
]
注意: >>
表示追加写入,>
表示覆盖写入。
格式2:
- 要求:cron计时通常格式
- 要求:python模块路径下待执行定时任务
- 可选:方法的位置参数列表(默认值:[])
- 可选:方法的关键字参数的dict(默认值:{})
- 可选:特定于定时任务的后缀(例如,将
out/err
重定向到文件,默认值为'')
示例:
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.other_scheduled_job', ['arg1', 'arg2'], {'verbose': 0}),
('0 4 * * *', 'django.core.management.call_command', ['clearsessions']),
]
对于熟悉 Linux 中定时任务crontab
的同学可能对上面第一个参数的语法很亲切。上面表示每隔1分钟执行一次代码。
Linux 中的定时任务crontab
的语法如下:
* * * * * command
分钟(0-59) 小时(0-23) 每个月的哪一天(1-31) 月份(1-12) 周几(0-6) shell脚本或者命令
有几个特殊的符号:
* 代表所有的取值范围的数字
/ 代表每的意思,*/5就是每5个单位
- 代表从某个数字到某个数字
, 分开几个离散的数字
示例:
每两个小时 0 */2 * * *
晚上11点到早上8点之间每两个小时,早上8点 0 23-7,8 * * *
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 0 11 4 * 1-3
1月1日早上4点 0 4 1 1 *
0 6 * * * commands >> /tmp/test.log # 每天早上6点执行, 并将信息追加到test.log中
0 */2 * * * commands # 每隔2小时执行一次
有兴趣的小伙伴可以深入研究下 Linux 的crontab
定时任务。如果不了解和不熟悉可以想看: cron语法格式学习
5.添加并启动定时任务
#添加并启动定时任务
python manage.py crontab add
其它命令:
#显示当前的定时任务
python manage.py crontab show
#删除所有定时任务
python manage.py crontab remove
一些问题
如果配置成这样:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
CRONJOBS = [
('0 7 * * 1-5', 'api.cron.email_to_late_docs', '>> {}'.format(BASE_DIR + '/logs/log_{:%d_%m_%Y}.log'.format(time.now()))),
('0 7 * * 1-5', 'api.cron.email_ten_days_before', '>> {}'.format(BASE_DIR + 'logs/log_{:%d_%m_%Y}.log'.format(time.now())))
]
上述代码的目的是,希望对任务的输出和错误日志,进行 log_ddmmYY
格式进行文件每天分开保存。
但是这个任务,在第二天时,就不会在执行啦!!
因为,CRONJOBS
生成任务时,会生成对应的哈希值(hashes),标识每个任务。所以,当文件名变更时,CRONJOBS
中的值每天都在变化,导致不同的定时任务哈希值(hashes)。
针对这种情况,解决方法是,日志文件名称固定,然后创建一个任务,用来每天把日志文件重命名(move)成想要的格式名称,这样就可以啦!
总结
通过这个需求,可以看到很多知识点其实是串联起来的,从python
到django
到Linux
的crontab
,所以,学习无止境,知识学习只会越来越多,如果你提前掌握了某些知识,那么学习新(旧)知识的成本就会降低很多,或者理解成本,比如你学习了 Linux
, 了解过 cron
,那么对于学习这个 django
的定时任务会轻松很多!永远不要认为有些知识你永远用不上,所以现在就不学,可能现在的永远距离已经很短啦!加油~
参考
- kraiz/django-crontab: dead simple crontab powered job scheduling for django.
- django开发-定时任务的使用 - wyzane - SegmentFault 思否
- django-crontab 定时执行任务方法 - 程序园
- django-crontab实现Django定时任务
- django使用django-crontab实现定时任务 - 简书
- 使用django-crontab实现定时任务 - 腾讯云
- cron语法格式学习 - 简书
- django-crontab is missing job hash after one day · Issue #76 · kraiz/django-crontab
- Cron Format - Wikipedia
- crontab.guru
链接:https://www.jianshu.com/p/2738d7dc6645
django 定时任务 django-crontab 的使用的更多相关文章
- 【Django】Django 定时任务实现(django-crontab+command)
一.编写自定义django-admin命令 注:利用django-admin自定义命令我们可以ORM框架对model进行操作,如:定时更新数据库,检测数据库状态..... Django为项目中每一个应 ...
- Django 定时任务实现(django-crontab+command)
一.编写自定义django-admin命令 注:利用django-admin自定义命令我们可以ORM框架对model进行操作,如:定时更新数据库,检测数据库状态..... Django为项目中每一个应 ...
- Django定时任务Django-crontab的使用
在使用的django做测试平台时,,多多少少都会遇到需要定时任务的功能,比如定时执行任务,检查订单之类 的.可能是一段时间,比如每隔 10分钟执行一次,也可能是定点时间,比如 14:00 执行,也可能 ...
- Django settings — Django 1.6 documentation
Django settings - Django 1.6 documentation export DJANGO_SETTINGS_MODULE=mysite.settings django-admi ...
- Python之路【第二十三篇】:Django 初探--Django的开发服务器及创建数据库(笔记)
Django 初探--Django的开发服务器及创建数据库(笔记) 1.Django的开发服务器 Django框架中包含一些轻量级的web应用服务器,开发web项目时不需再对其配置服务器,Django ...
- Django 初探--Django的开发服务器及创建数据库(笔记)
1.Django的开发服务器 Django框架中包含一些轻量级的web应用服务器,开发web项目时不需再对其配置服务器,Django提供的内置服务器可以在代码修改时自动加载,从而实现网站的迅速开发. ...
- linux下系统定时任务配置----crontab(mysql定时备份)
crontab命令用于设置周期性被执行的指令,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任 ...
- 定时任务之crontab命令
1.简介 crontab用于设置周期性被执行的命令 Linux系统中Linux调动工作分为两大类: 1.系统执行的工作:系统周期性所要执行的工作,如备份系统数据.清理缓存 2.个人执行的工作:某个用户 ...
- Django之django模型层二多表操作
一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. ...
随机推荐
- [bzoj4873] [洛谷P3749] [Shoi2017] 寿司餐厅
Description Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个 代号ai和美味度di,i,不同种类的寿司有可能使用相同的代号.每种寿 ...
- xlwings excel(四)
前言 当年看<别怕,Excel VBA其实很简单>相见恨晚,看了第一版电子版之后,买了纸质版,然后将其送人.而后,发现出了第二版,买之收藏.之后,发现Python这一编程语言,简直是逆天, ...
- Photoshop 2020安装教程
首先来看看新增功能 [Photoshop 2020新增功能] 1.ipad和云文档 2.预设改进 3.新对象选择工具 4.转换行为一致 5.改进的属性面板 6.智能对到图层 7.增强的转换变形. 需要 ...
- leetcode腾讯精选练习之螺旋矩阵(八)
螺旋矩阵 题目 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], ...
- pycharm安装PIL失败
搜索安装PIL后无法成功安装,在尝试各种版本后依旧无法解决 问题解决 安装Pillow-PIL,既可以成功执行代码 因为pil没有64位的版本,所以需要下载安装第三方支持64位系统的版本才可以使用.
- Python3 os.path() 模块笔记
os.path 模块主要用于获取文件的属性. 以下是 os.path 模块的几种常用方法: 方法 说明 os.path.abspath(path) 返回绝对路径 os.path.basename(pa ...
- CTF--HTTP服务--路径遍历(拿到www-data用户权限)
开门见山 1. 扫描靶机ip,发现PCS 172.18.4.20 2. 用nmap扫描靶机开放服务及版本 3. 再扫描靶机的全部信息 4. 用nikto工具探测http服务敏感信息 5. 用dirb工 ...
- 前端url参数中带有callback并产生错误
错误截图: 初步诊断是由于后端返回值的数据格式不正确造成的 解决方式: 1).接受在springmvc中接受callback参数 2).将对象转为Object 3).拼接callback方法,其中返回 ...
- 有基因ID或者基因名,如何拿到对应的KEGG通路图?
1.https://www.kegg.jp/kegg/tool/map_pathway2.html 2.如下图,筛选出基因所在的通路,并标上不同的颜色. 3.结果页面如下,有些基因会找不到对应的通路, ...
- 如何在国内下载Eclipse及其插件
北京理工大学 http://mirror.bit.edu.cn/eclipse/ 中国科学技术大学 http://mirrors.ustc.edu.cn/eclipse/ 大连东软信息学院 http: ...