1. 程式人生 > >使用django-crontab執行django自定義指令

使用django-crontab執行django自定義指令

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 所在的目錄下的絕對路徑
    • sss:代表你django中自定義的指令
  • 輸入命令:crontab -e 編輯定時任務:

    • 輸入

      • 0 16 * * * /xxx/xxx/xxx/lhq.sh > /xxxx/xxxx/xxxx/log.log 2>&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了。