Django之定時任務django-crontab的實現(xiàn)
crontab
Django可以使用第三方庫如django-crontab
來實現(xiàn)定時任務的調(diào)度。該庫允許使用類似于crontab文件格式的語法指定任務的執(zhí)行時間。
GitHub地址:https://github.com/kraiz/django-crontab
安裝django-crontab
pip install django-crontab
注冊應用
在settings.py文件中注冊django-crontab應用
INSTALLED_APPS = [ 'django_crontab', # 定時任務 ]
定時時間格式
django-crontab使用Linux下常用的cron調(diào)度器進行任務調(diào)度。對于時間格式的指定,它遵循標準的crontab語法,分為五個字段,從左到右依次為:
* * * * * - - - - - | | | | | | | | | +----- day of the week (0 - 6) (Sunday=0) -------------d | | | +------- month (1 - 12) -------------m | | +--------- day of the month (1 - 31) -------------D | +----------- hour (0 - 23) -------------H +------------- min (0 - 59) -------------M
說明:
M: 分鐘(0-59)每分鐘用 * 或者 */1 表示
H:小時(0-23)(0表示0點)
D:天(1-31)
m: 月(1-12)
d: 一星期內(nèi)的天(0~6,0為星期天)
星號(*):所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件后每月都執(zhí)行該命令操作
逗號(,):可以用逗號隔開的值指定一個列表范圍,例如: 1,2,5,7,8,9
中杠(-):可以用整數(shù)之間的中杠表示一個整數(shù)范圍,例如: 2-6表示2,3,4,5,6
正斜線(/):可以用正斜線指定時間的間隔頻率,例如: 0-23/2表示每兩小時執(zhí)行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執(zhí)行一次
注意: 所有值都必須在相應的范圍之內(nèi),否則視為無效
定時時間示例
0 */1 * * * # 每1小時執(zhí)行一次 0 10 * * * # 每天10點執(zhí)行 30 19 * * * # 每天19點30分執(zhí)行 0 10 * * 1 # 每周一10點執(zhí)行 30 17 * * 5 # 每周五17點30分執(zhí)行 0 10 1 10 * # 每年10月1日10點執(zhí)行 0 5,17 * * * # 每天5:00和17:00執(zhí)行任務 0 3 * * * # 表示每天凌晨三點執(zhí)行 */5 * * * * # 表示每隔5分鐘執(zhí)行一次 0 0 1,15 * * # 表示每月1日和15日午夜執(zhí)行 30 8 1-7 * * # 表示每個月的前7天中,每日上午8:30執(zhí)行
設置定時任務
定時任務分為三部分定義:任務時間、任務方法、任務日志,在settings.py文件配置:
CRONJOBS = [ # 每1分鐘執(zhí)行一次 # users:應用名,task為py文件名,task_job為文件中的函數(shù) ('*/1 * * * *', 'apps.users.task.task_job', '>> ' + os.path.join(BASE_DIR, 'logs/crontab.log')), # 每隔5分鐘運行一次 ('*/5 * * * *', 'apps.users.task.my_scheduled_job'), ]
@符號方法
django-crontab 支持使用 @ 符號來快速指定一些常見用法,例如:
@reboot:在系統(tǒng)啟動時運行一次 @yearly 或 @annually:每年1月1日 0:00 運行一次 @monthly:每月1日 0:00 運行一次 @weekly:每周日 0:00 運行一次 @daily 或 @midnight:每天0:00 運行一次 @hourly:每小時運行一次
@yearly 或 @annually:表示每年執(zhí)行一次,相當于 0 0 1 1 *
CRONJOBS = [ ('@yearly', 'myapp.tasks.my_scheduled_job'), ]
@monthly:表示每月執(zhí)行一次,相當于0 0 1 * *
CRONJOBS = [ ('@monthly', 'myapp.tasks.my_scheduled_job'), ]
@weekly:表示每周執(zhí)行一次,相當于 0 0 * * 0
CRONJOBS = [ ('@weekly', 'myapp.tasks.my_scheduled_job'), ]
@daily 或 @midnight:表示每天午夜執(zhí)行一次,相當于 0 0 * * *
CRONJOBS = [ ('@daily', 'myapp.tasks.my_scheduled_job'), ]
@hourly:表示每小時執(zhí)行一次,相當于0 * * * *
CRONJOBS = [ ('@hourly', 'myapp.tasks.my_scheduled_job'), ]
解決crontab中文問題
在定時任務中,如果出現(xiàn)非英文字符,會出現(xiàn)字符異常錯誤
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
管理定時任務
1.執(zhí)行定時任務
# 添加定時任務到系統(tǒng)中 python manage.py crontab add
2.取消定時任務
# 移除定時任務 python manage.py crontab remove
3.查詢激活定時任務
# 顯示已激活的定時任務 python manage.py crontab show
注意
1.crontab不適用于Windows平臺。
2.django-crontab默認使用的是UTC時間,與當前系統(tǒng)時區(qū)可能不同。
可以在 settings.py 文件中指定CRONTAB_TIMEZONE選項來設置時區(qū),例如:
將時區(qū)設置為東八區(qū)(GMT+8)
CRONTAB_TIMEZONE = ‘Asia/Shanghai'
到此這篇關(guān)于Django之定時任務django-crontab的實現(xiàn)的文章就介紹到這了,更多相關(guān)django-crontab定時任務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 實現(xiàn)turtle畫圖并導出圖片格式的文件
今天小編就為大家分享一篇python 實現(xiàn)turtle畫圖并導出圖片格式的文件,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python streamlit構(gòu)建令人驚嘆的可視化Web高級主題界面
本文將深入探討Streamlit的方方面面,從基礎使用到高級主題,從數(shù)據(jù)可視化到部署與分享,更涵蓋了性能優(yōu)化、安全性考慮等最佳實踐,通過豐富的示例代碼和詳細解釋,將能夠全面了解Streamlit的強大功能,并在構(gòu)建數(shù)據(jù)驅(qū)動應用時游刃有余2024-01-01淺談Pandas中map, applymap and apply的區(qū)別
下面小編就為大家分享一篇淺談Pandas中map, applymap and apply的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04django 將自帶的數(shù)據(jù)庫sqlite3改成mysql實例
這篇文章主要介紹了django 將自帶的數(shù)據(jù)庫sqlite3改成mysql實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python基于staticmethod裝飾器標示靜態(tài)方法
這篇文章主要介紹了Python基于staticmethod裝飾器標示靜態(tài)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10