如何讓django方法自動地按期執行

實現思路:

      1.首先把須要自動執行的django method寫成django command
      2.將本身定義的django command添加到cron中使用cron服務實現按期執行 python

Part1 在django工程中添加自定義的django command
      1.咱們本身創建的application叫作myapp,首先在這個app目錄下,咱們須要新建management目錄,這個目錄裏應該包括:__init__.py(內容爲空,用於打包)和commands目錄,而後在commands目錄下包括:__init__.py和mycommand.py ,其中 mycommand.py就是用於咱們自定義command的方法,目錄的樹狀結構以下: shell

myapp/
    __init__.py
    models.py
    management/
        __init__.py
        commands/
            __init__.py
            mycommand.py
    tests.py
    views.py
      2.mycommand.py的command內容書寫,簡單示例以下:
from django.core.management.base import BaseCommand,commandError           

class Command(BaseCommand):
    def handle(self, *args, **options):         
        print "hello world"
        咱們把BaseCommand類關聯進來,使用command類和handle方法來做爲框架,如上,這個command實現的就是打印 "hello world".

        經過以上 咱們就能夠使用python manage.py mycommand 的方式來運行咱們本身的django命令了。
        想了解更詳細,看這裏django

Part2 使用cron來按期執行django command
        首先要肯定本身的cron服務是開啓的: bash

sudo service crond start
#sudo service crond stop
#sudo service crond restart
        將django command我寫了一個簡單的shell腳本,給你們參考:
#!bin/bash

p=$PWD
touch $p/djangocron
touch $p/djangocron.log
echo "0 6,12,18 * * 1-5 python $p/manage.py mycommand > $p/djangocron.log 2>&1" > djangocron
crontab djangocron 
crontab -l
        解釋一下:
        這個腳本放在與manage.py同一目錄下,以便p=$PWD獲取能用的當前路徑。
        touch先創建一個djangocron文件,用於存放crontab的命令,創建的djangocron.log用來存輸出信息。
0 6,12,18 * * 1-5 python $p/manage.py mycommand > $p/djangocron.log 2>&1
       這一句寫入djangocron文件,就是cron的配置了 0 6,12,18 * * 1-5這幾個參數未改動的格式是 * * * * * 五個參數使用空格隔開分別表示 分鐘 小時 天 月 周,我這裏的配置就是每一個週一到週五的6點0分 12點0分 18點0分執行後面的命令;
       後面的命令 python $p/manage.py mycommand,$p是路徑的引用,其實就是 python manage.py mycommad.  
       小箭頭 > $p/djangocron.log 2>&1的意思就是 將命令的輸出結果轉存到djangocron.log文件,2>&1的意思是同時將錯誤信息也存入djangocron.log文件。
       crontab djangocron的做用是將咱們寫的djangocron文件在crontab中裝載,裝載後能夠:
crontab -l #查看
crontab -e #修改

       只要調整cron前面設置的時間參數,就能夠測試本身的命令有沒有成功執行,查看djangocron.log來查看輸出和error。 app

相關文章
相關標籤/搜索