一、Introduction 二、Backgoround 三、CRONTAB 1.安裝 2.配置 3.添加定時任務 4.啟動任務 四、結束 五、參考
一、Introduction
在官網上的說明:
dead simple crontab powered job scheduling for django
英語不好的我只是認為crontab能給django提供一個按照時間進行的作業調度的功能。 二、Backgoround
在做網站的時候,往往需要在某個固定的時間點,或者某個固定的時間間隔自動的觸發一個事件,進行一些操作。比如每個月的財務報表在月末的時候會自動產生,然後發一個賬單到你的email中。
針對這個需求,我們就要使用crontab實現定時器的功能。
但是在django中實現定時器的工具有好幾種,我們使用crontab是因為它比較簡單,便於使用。
celery也可以實現這個功能,這裡就不討論了。
但是crontab有個缺點:
就是他不支援在windows使用。不過幸好博主就是在linux上開發的。 三、CRONTAB
話不多說,開始使用crontab吧。 1.安裝
pip install django-crontab
2.配置
在setting.py中的INSTALLED_APPS加入django_crontab
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_crontab',]
3.添加定時任務
在app中的xxx.py中加入task()函數
# 某個app/xxx.pydef task(): #定時任務 ···
同時要在setting.py中添加這個定時任務
CRONJOBS = [ # 每一分鐘執行一次 ('*/1 * * * *', 'app名稱.xxx.task')]
具體參數解釋:
前5個(*)星號: M(分鐘0-59) H(小時0-23) D(天1-31) m(月1-12) d(一星期內的天0-6,0為星期天)
特殊符號: * 代表所有的取值範圍的數字 / 代表每的意思,*/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 * 4.啟動任務
# 將任務添加並生效python manage.py crontab add# 顯示當前的定時任務python manage.py crontab show# 刪除所有定時任務python manage.py crontab remove# 只運行定時任務試一試python manage.py crontab run
注意:
當添加一個定時任務後:
得到了一個hash值,所以在進行run的時候:
python manage.py crontab run 2fc2215151a785c33b28c74ad5feb636
就像git一樣
除此之外,要有查看crontab的檔案的命令:corntab -e 四、結束
運行這個項目就會定時觸發事件,執行你要的代碼了。
當然要是僅僅輸出一些東西,啟動並執行時候是看不到的。
列印log,傳參等等這裡就不贅述了。如圖
五、參考
https://github.com/kraiz/django-crontab
https://pypi.python.org/pypi/django-crontab