django-crontab 部署
需求:再指定的時間內輸入django的自定義指令,來進行一些需求的操作。
使用流程:
1.安裝:
pip install django-crontab
2.配置 settings.py文件:
再settings.py 文件中添加 django-crontab:
INSTALLED_APPS = (...'django_crontab',
)
3.配置django-crontab:
再settings.py中添加一下命令:
CRONJOBS = [# 定時函數每分鐘執行一次('*/1 * * * *', '你的app名.定時函數所在的py文件名.定時函數名'),# 將定時函數執行結果輸出到指定文件(如果該路徑或文件不存在將會自動創建)('*/1 * * * *', '你的app名.定時函數所在的py文件名.定時函數名', '>> 輸出文件路徑和名稱')
]
如果要再指定的時間內輸入django自定義的指令,其實還可以定時函數:
CRONJOBS = (# 每天早上6點執行命令('0 6 * * *', 'django.core.management.call_command', ['要執行的命令']),
)
注意:要執行的命令,直接輸入你django項目中自定義的指令就好,不需要添加python manage.py xxxxx(自定義指令)
操作命令:
查看系統中已有的定時任務:
python manage.py crontab show
添加和修改定時任務:
python manage.py crontab add
刪除定時任務:
python manage.py crontab remove
注意事項:
1:該django-crontab : 不能再win系統上操作。
2:如果再操作命令的時候報錯:
RuntimeError: No job with hash 18a9888406b9f5486e6b7ea52ee68dbf found. It seems the crontab is out of sync with your settings.CRONJOBS. Run “python manage.py crontab add” again to resolve this issue!
解決方案:意思就是修改過了,可以再執行一次命令就好:
python manage.py crontab add
3:django-crontab 必須再linux的crontab開啟的情況下才可以使用。
4:如果你測試有沒有跑通的時候,輸入的只是一個print()語句的話,那么你將看不到任何內容。
可以再/var/spool/mail/root中查看你的輸入語句:
一般這種情況mail的內容就只是一些正常的系統信息或者是比較重要的錯誤報告。如果你安裝了mutt的話直接用這個命令就可以查看mail的內容(用root登陸先),沒有裝的話用cat /var/spool/mail/root查看(用root登陸先)。
crontab的運行時間舉例:
crontab范例 :
每五分鐘執行 */5 * * * *每小時執行 0 * * * *每天執行 0 0 * * *每周執行 0 0 * * 0每月執行 0 0 1 * *
crontab 常用命令:
crontab -e 編輯定時任務
crontab -l 查看定時任務
還可以使用shell腳本來實現定時執行自定義指令:
寫一個shell腳本來自動運行:
創建一個shell腳本:
#!/bin/bash/usr/bin/python /xxx/xxx/xxx/manage.py sss
xxx:manage.py 所在的目錄下的絕對路徑
切換到manange.py 所在的目錄 pwd:查看當前的路徑。
sss:代表你django中自定義的指令
輸入命令:crontab -e 編輯定時任務:
輸入
0 16 * * * /xxx/xxx/xxx/lhq.sh > /xxxx/xxxx/xxxx/log.log 2>&1
1
0 16 * * *代表的是,每天的16點進行一次操作
把lhq.sh 剛才創建的shell腳本放到跟manage.py同級目錄下:
xxx代表的是:絕對路徑
lhq.sh 后面的 > /xxxx/xxxx/xxxx/log.log 2>&1 導入log日志 xxxx 代表的是導入log日志的絕對路徑。
注意:
可能此刻crontab沒有跑起來, 去查看log 日志會提示你Permission denied
解決方案:chmod 777 lhq.sh 就Ok了。