2017-06-15 71 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文件应该是一个绝对路径(在脚本中的所有其他路径)一起。