django crontab定時執行任務


安裝 pip install django-crontab

添加app名稱到 settings.py中

  1. INSTALLED_APPS = (
  2. 'django_crontab',#這個不是app的名字,必須要添加到前面,不能接着app后面添加,否則會報錯
  3. ...
  4. )

接下來創建定時任務可以分成兩種,一種是執行自定義的mange.py的命令,另一種是執行自定義函數。

我選擇的方法是自定義函數。

首先在原來的app 中(與view.py同級)新建一個cron.py (名字可以任意,其實也可以放在view.py中,新建文件方便管理。)

  1. def test():
  2. print 123
  3. #你要執行的任務函數

在 settings.py中的最后增加

  1. CRONJOBS = [
  2. ( '*/5 * * * *', 'appname.cron.test','>>/home/test.log')
  3. ]

如果你有多個定時任務,都放入CORJOBS中即可, 
需要說明的是, 
‘/5 * * *’ 遵循的是crontab 語法。

‘appname.cron.test’,這個appname就是你開發時加入到settings中的那個。因為你的cron.py文件就在這個下面,否則找不到路徑。cron 就是你自己起的任務文件的名字。test就是執行的函數中的內容。

‘>>/home/test.log’,通常會輸出信息到一個文件中,就使用這個方法,注意的是‘>>’表示追加寫入,’>’表示覆蓋寫入。

啟動

以上都完成后,需要執行 
python manage.py crontab add 
將任務添加並生效

顯示當前的定時任務 
python manage.py crontab show

刪除所有定時任務 
python manage.py crontab remove

重啟django服務。 
執行 
crontab -e 
可以看到系統中創建了該定時任務。 
說到底,只是django-crontab插件對linux底層的調用,這個方法在windows 上不生效。

各種路徑一定要確保正確,否則較難排查錯誤。

錯誤一

1、django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_BACKEND, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

解決辦法:

  1. import os,django
  2. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "XXXX.settings")# project_name 項目名稱 要並寫正確
  3. django.setup()

錯誤二

2、ModuleNotFoundError: No module named 'XXX' 解決方法

解決辦法:

看錯誤1 檢查xxx.settings 拼寫 或路徑是否正確!

3、No job with hash 2be49f0a34207a4b9fd6fb0d3df2d78e found. It seems the crontab is out of sync with your settings.CRONJOBS. Run "python manage.py crontab add" again to resolve this issue! 解決辦法

重新啟動項目,在執行對crontab 的操作

#錯誤三

單獨用.py文件處理業務時,需要把調用的模塊放到方法中不然會報錯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM