现在需要定时执行一个函数,在linux上可以使用django-crontab这个django插件,非常方便,而且在压力测试中由于调用的是linux底层的命令crontab,所以在压力测试面前比其他的效率都要高.
注意:windows不能使用
Table of Contents
1.安装与配置
2.启动
3.验证
4.更多的配置与定制
4.1周期性的配置:
4.2为周期执行的函数提供参数
首先安装
pip install django-crontab
添加app名称到 settings.py中
INSTALLED_APPS = (
'django_crontab',
...
)
然后在随意的一个app下的任意一个.py文件中创建一个测试方法,也可以把这个方法放在view.py文件中:
#这是要定期执行的函数
def test():
#因为真正执行的时候不太方便排查问题,所以建议使用try包裹一下
try:
print("啦啦啦啦啦")
except Exception as e:
print(e)
finally:
print("\n")
在 settings.py中增加一个配置:
#CRONJOBS 这个写法固定
CRONJOBS = [
#('按照怎样的周期执行', 'App的名称.app下的py文件名称.方法名','>>将输出的log保存的文件目录')
('*/5 * * * *', 'test_app.view.test','>>~/test.log')
]
注意:
以上都完成后,需要执行下面的代码:
python manage.py crontab add
这样就可以了
显示当前的定时任务
python manage.py crontab show
删除所有定时任务
python manage.py crontab remove
在linux的命令行中输入:
crontab -e
可以看到系统中创建了该定时任务。
比如:
'47 11 * * *' 表示: 每个月_不论几号_不论周几 的 第11小时_第47分钟 执行一次 (也就是每天11:47执行)
'5 * * * *' 表示: 每个月_不论几号_不论周几 的 每个小时_第5分钟 执行一次 (也就是每小时的第5分钟执行)
'*/5 * * * *' 表示: 每个月_不论几号_不论周几 的 每个小时_每隔5分钟 执行一次 (也就是每5分钟执行一次)
'*/10 20-23 * * 6-7' 表示: 每个月_不论几号_周六周日 的 20-23点 每隔10分钟 执行一次 (也就是周末晚上8点到11点,每隔10分钟执行一次)
机智的你们可能发现了,每一项都是"并"的关系,给定具体的值,就是定时,给定 */n ,就是每隔n个时间单位
所以可以通过组合配置出自己想要的周期.不过一般第三个 * 与 第五个 * 只配置一个
#固定顺序传参数
('0 0 * * 0', 'app名.py文件名.函数名', ['参数1', '参数2']),
#指定参数与值
('0 0 * * 0', 'app名.py文件名.函数名',{'参数1':4,'参数2':'abc'}),
第一种为按照固定的顺序传递参数,第二种为指定参数名并赋值,举例:
#对于函数 test(par1,par2,par3=1,par4='a')
上面两种方法就好像是调用:
#固定顺序传参 ['aa', 22]
test('aa',22)
#指定参数与值 {'par1':'aa','par3':'b'}
test(par1='aa',par3='b')
当然可以两个混用,捎带着保存输出的日志:
('0 0 * * 0', 'app名.py文件名.函数名', ['参数1', '参数2'],{'参数1':4,'参数2':'abc'},'>>~/test.log')
这样的配置就高度自由了
参考链接:
https://opensource.com/article/17/11/how-use-cron-linux
https://github.com/kraiz/django-crontab
https://linux.die.net/man/1/crontab
https://blog.csdn.net/sinat_21302587/article/details/72831002
https://blog.csdn.net/yongche_shi/article/details/48683529
https://blog.csdn.net/msllws/article/details/80931675