2017-06-15 105 views
1

我是這個領域的新手,我目前正在嘗試使用cron獲取每小時更新一個sqlite數據庫(用於django)的python腳本。 這裏是腳本Cron腳本運行正常,但沒有更新Django數據庫

import requests, sys, os, django, csv 

sys.path.append("\var[...]\django") 
os.environ["DJANGO_SETTINGS_MODULE"] = "s.settings" 
django.setup() 

from health.models import s_model 
import datetime 
import logging 

#################### initialising log file 

today = datetime.datetime.now() 
logging.basicConfig(filename="/var/[...]/processing.log", level=logging.INFO) 
logging.info("\nScript run at " + str(today) + "\n") 

################### getting data from csv and saving it to DB 

with open('file.csv', 'rU') as csvfile: 
    try: 
     csvreader = csv.reader(csvfile, delimiter=',', quotechar='"') 
     i=0 
     for row in csvreader: 
      if(i>0): 
       people = {} 
       people['name'] = notNull(row[0].strip()) 
       people['age'] = notNull(row[1].strip()) 
       people = s_model(**people) 
       people.save() 
      i=i+1 
    except Exception: 
     logging.error("Error processing number for id "+ str(row["Id"])) 
     return 

的削減版本,我有這個文件坐在cron.hourly

#!/bin/bash 
/var/[...]myfile.py 

我已經檢查:

  • 當我檢查的django頁面數據庫中的數據沒有更新。
  • 當我從它的文件夾手動運行myfile.py時,它運行良好,數據庫立即更新。
  • cron文件末尾有一個換行符。
  • 我檢查了權限(cron.hourly文件和myfile.py文件都有+ x權限,並且由root擁有)
  • 當我檢查日誌文件(腳本記錄的文件) ,它告訴我腳本每小時運行良好,沒有錯誤。
  • 我嘗試過「sudo service apache2 restart」,但頁面仍未更新。

有沒有什麼明顯的我沒有檢查?任何幫助或方向將非常感謝!

謝謝!

+1

是您的應用程序在虛擬環境中嗎? – fixmycode

+0

此外,爲了防止初始化django環境,您可以創建自己的manage.py命令https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/ – SebCorbin

+0

@fixmycode我已經完成了「pip - V「在django文件夾中,它告訴我」從/usr/local/lib/python2.7/dist-packages/pip-9.0.1-py2.7.egg(python 2.7)的pip 9.0.1「是這個正確的方式來檢查虛擬環境? – zibethin

回答

0

好的,所以問題得到解決。只要把它放在這裏,以防其他人遇到它。

1)在cron腳本的文件位置前面有一個sudo python丟失。現在代碼運行並更新數據庫。

#!/bin/bash 
sudo python /var/[...]myfile.py 

2)而作爲第二個問題,上述myfile.csv CSV文件應該是一個絕對路徑(在腳本中的所有其他路徑)一起。