1.安装
pip install django-crontab
2.添加app名称到 settings.py中
INSTALLED_APPS = (
'django_crontab',#这个不是app的名字,必须要添加到前面,不能接着app后面添加,否则会报错
...
)
3.接下来创建定时任务可以分成两种,一种是执行自定义的mange.py的命令,另一种是执行自定义函数。
我选择的方法是自定义函数。
首先在原来的app 中(与view.py同级)新建一个update1day.py,名字任意(建文件夹可能出错!)。
写入程序(这是一段爬虫,爬取数据,然后更新数据库中的数据)
import datetime
from COVID_19Analyse.models import Country, CountryData
from COVID_19Analyse.tools.datetimeSupport import TimeTools
from COVID_19Analyse.tools.DataSpider import DataSpider
def hourUpdate():
print("----------------更新今日数据----------------")
print(datetime.datetime.today().strftime("%Y-%m-%d %H:%M"))
countries = Country.objects.all()
countryDateDictList = []
for country in countries:
# 开始时间为昨天
dictTmp = {country.name: TimeTools.getYesterday()}
countryDateDictList.append(dictTmp)
spider = DataSpider()
ans = spider.update(countryDateDictList)
cnt = 0
for key in ans:
countryObject = Country.objects.get(name=key)
for data in ans[key]:
dataObject = countryObject.countrydata_set.get(date=data["date"])
dataObject.confirm_add = data["confirm_add"]
dataObject.confirm = data["confirm"]
dataObject.heal = data["heal"]
dataObject.dead = data["dead"]
dataObject.save()
cnt += 1
print("{:<12} {}条数据已更新".format(TimeTools.getToday().strftime("%Y-%m-%d"),cnt))
print("-----------------更新结束-----------------")
print()
4.在 settings.py中的最后增加
# 定时函数
CRONJOBS = [
('*/3 * * * *', 'EndProject.update1day.hourUpdate','>>/Users/chen/PycharmProjects/EndProject/EndProject/log/hourUpdate.txt'),
('0 */32 * * *', 'EndProject.update2day.dailyUpdate','>>/Users/chen/PycharmProjects/EndProject/EndProject/log/dailyUpdate.txt'),
]
如果你有多个定时任务,都放入CORJOBS中即可,
需要说明的是,
‘*/3 * * * *’ 遵循的是crontab 语法。
第二个参数:‘appname.cron.test’,这个appname就是你开发时加入到settings中的那个。(我的就是:“EndProject. update1day.hourUpdate”)
因为你的cron.py文件就在这个下面,否则找不到路径。cron 就是你自己起的任务文件的名字。test就是执行的函数中的内容。
‘>>/home/test.log’,通常会输出信息到一个文件中,就使用这个方法,注意的是‘>>’表示追加写入,’>’表示覆盖写入。
时间计算可以参考:crontab时间计算
以上都完成后,需要执行
python manage.py crontab add
将任务添加并生效
显示当前的定时任务
python manage.py crontab show
删除所有定时任务
python manage.py crontab remove
然后重启django服务。
执行
crontab -e
可以看到系统中创建了该定时任务。
说到底,只是django-crontab插件对linux底层的调用,这个方法在windows 上不生效。
各种路径一定要确保正确,否则较难排查错误。
结果如下:
