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 上不生效。
各種路徑一定要確保正確,否則較難排查錯誤。
結果如下: