2017-06-15 5 views
1

Ich bin neu in diesem Feld, und ich versuche derzeit, ein Python-Skript zu erhalten, um eine SQLite-Datenbank (für Django) jede Stunde mit Cron zu aktualisieren. Hier ist eine abgespeckte Version des SkriptsCron-Skript läuft gut, aber keine Aktualisierung der Django-Datenbank

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 

Und ich habe diese Datei

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

in namens cron.hourly

sitzen Was ich überprüft haben:

  • Wenn ich auf dem Scheck Djangoseiten werden die Daten aus den Datenbanken nicht aktualisiert.
  • Wenn ich die Datei myfile.py manuell aus ihrem Ordner ausführen, läuft es einwandfrei und die Datenbank wird sofort aktualisiert.
  • Am Ende der Cron-Datei befindet sich eine neue Zeile.
  • Ich habe die Berechtigungen geprüft (sowohl die Datei cron.hourly als auch die Datei myfile.py haben + x Berechtigung und sind im Besitz von root)
  • Wenn ich die Protokolldatei (die durch das Skript protokolliert) überprüfen Es sagt mir, das Skript läuft jede Stunde gut und es gab keine Fehler.
  • Ich habe versucht "sudo service apache2 restart", aber die Seiten sind immer noch nicht aktualisiert.

Gibt es etwas Offensichtliches, das ich nicht überprüft habe? Jede Hilfe oder Anweisung wird sehr geschätzt!

Danke!

+1

ist Ihre App in einer virtuellen Umgebung? – fixmycode

+0

Um die Initialisierung der django-Umgebung zu verhindern, könnten Sie auch Ihren eigenen manage.py-Befehl erstellen https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/ – SebCorbin

+0

@fixmycode Ich habe "pip - V "im Django-Ordner und es sagt mir" pip 9.0.1 von /usr/local/lib/python2.7/dist-packages/pip-9.0.1-py2.7.egg (Python 2.7) "ist dies die richtige Art der Überprüfung auf eine virtuelle Umgebung? – zibethin

Antwort

0

Ok, die Probleme wurden behoben. Setzen Sie es einfach hier hin, für den Fall, dass noch jemand hineinrennt.

1) Es gab eine Sudo Python fehlt vor der Datei Speicherort im Cron-Skript. Jetzt wird der Code ausgeführt und aktualisiert die Datenbank.

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

2) Und als zweite Ausgabe, die CSV-Datei über myfile.csv sollte ein absoluter Pfad (zusammen mit allen anderen Pfaden im Skript) gewesen.

Verwandte Themen