django-crontab實作定時任務
1 django-crontab安裝
-
django-crontab安裝:
pip install django-crontab -
django-crontab加入:只需要將
django-crontab加入到settings.py的INSTALLED_APPS即可,如下代碼:INSTALLED_APPS = ( 'django_crontab', ... )
2 django-crontab配置
django-crontab可以定時運行自定義命令和函式兩種方式,因為之前嘗試用command+crontab時已經實作了自定義command,所以自然而然使用了自定義命令這種形式,
2.1 django-crontab定時運行命令
我先參考Django官方檔案自定義了一個命令aizhan_5domain_visits,專門用于抓取愛站流量,并將結果保存在sqlite3資料庫中(具體步驟在本文中不贅述了),
其次,我在settings.py中加入了django-crontab的命令:
CRONJOBS = [
('47 11 * * *', 'django.core.management.call_command', ['aizhan_5domain_visits']),
]
意思就是每天11點47分運行aizhan_5domain_visits這個命令,接下來就剩最后一步任務加載了,
2.2 django-crontab定時運行函式
django-crontab也可以定時運行函式,只是在CRONJOBS配置時有差別,CRONJOBS關于函式的配置如下:
CRONJOBS = (
# 初級模式
('*/5 * * * *', 'myproject.myapp.cron.my_scheduled_job'),
# 中級模式
('0 0 1 * *', 'myproject.myapp.cron.my_scheduled_job', '> /tmp/last_scheduled_job.log'),
#高級模式
('0 0 * * 0', 'django.core.management.call_command', ['dumpdata', 'auth'], {'indent': 4}, '> /home/john/backups/last_sunday_auth_backup.json'),
)
分析結果:
- 初級模式很直觀,意思就是每五分鐘執行一次
my_scheduled_job這個程式; - 中級模式有個后綴,意思是將程式
my_scheduled_job的結果輸出到檔案/tmp/last_scheduled_job.log中; - 高級模式加入了引數,其中
['dumpdata', 'auth']和{'indent': 4}都是引數,只是[]中的引數是按照順序代入,而{}中的引數指定了變數名稱,最后一個也是輸出結果的后綴,
3 django-crontab任務加載(注意:服務器遷移過后,一定要查看下原服務器是否有定時任務在執行,如果有,就要在新服務器上從新添加該定時任務腳本,命令如下python manage.py crontab add)
django-crontab任務加載比較簡單,只需要運行python manage.py crontab add即可,如果你運行crontab -e可以看到crontab中多了一行:
* * * /home/aizhan/bin/python /home/aizhan/aizhan/manage.py crontab run c27d1050fb7f87225bcff587ef5a35a3 # django-cronjobs for aizhan
這是django-crontab自動生成的,
- 如果要移除所有的任務,則運行
python manage.py crontab remove; - 當你修改了任務,需要再次運行
python manage.py crontab add,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56984.html
標籤:Python
上一篇:[Python.Unix和Linux系統管理指南]書籍
下一篇:130被圍繞的區域
