2010-07-26 12 views
10

Wenn ich meine Python-Skript über die Befehlszeile ausführen habe ich keine Probleme, wie so:Crontab gewohnt laufen Python-Skript

[rv @ med240-183 db] $ python formatdb.py
[rv @ med240 -183 db] $

Wenn ich versuche, crontab zu verwenden, um das Skript jeden Tag um Mitternacht ich eine Reihe von Fehlern auszuführen:

import: unable to open X server `' @ import.c/ImportImageCommand/367. 
/home/rv/ncbi-blast-2.2.23+/db/formatdb.py: line 2: from: command not found 
/home/rv/ncbi-blast-2.2.23+/db/formatdb.py: line 3: from: command not found 
import: unable to open X server `' @ import.c/ImportImageCommand/367. 
/home/rv/ncbi-blast-2.2.23+/db/formatdb.py: line 6: syntax error near 
unexpected token `(' 
/home/rv/ncbi-blast-2.2.23+/db/formatdb.py: line 6: `conx = MySQLdb.connect 
(user = 'root', passwd = '******', db = 'vaxijen_antigens')' 

Das Verzeichnis von meinem Skript wie folgt:

/home/rv/ncbi-blast-2.2.23+/db/

Crontab sieht aus wie:

SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/python/:/home/rv/ncbi-blast-2.2.23+/database_backup:/home/rv/ncbi-blast-2.2.23+/db/ 
MAILTO="******" 
HOME=/ 

# For details see man 4 crontabs 

# Example of job definition: 
# .---------------- minute (0 - 59) 
# | .------------- hour (0 - 23) 
# | | .---------- day of month (1 - 31) 
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 
# | | | | | 
# * * * * * command to be executed 
0 0 * * * root /home/rv/ncbi-blast-2.2.23+/database_backup/backup.py 
0 0 * * * root /home/rv/ncbi-blast-2.2.23+/db/formatdb.py 

und mein Python-Skript wie folgt aussieht: In

import MySQLdb 
from subprocess import call 
from subprocess import Popen 
import re 

conx = MySQLdb.connect (user = 'root', passwd = '******', db = 'vaxijen_antigens') 

cursor = conx.cursor() 
cursor.execute('select * from sequence') 
row = cursor.fetchall() 

f = open('vdatabase.fasta', 'w') 

for i in row: 
    f.write('>'+i[0].strip()+'\n') 
    #f.write(i[1].strip().replace(' ','')+'\n') 
    s = re.sub(r'[^\w]','',str(i[1])) 
    s = ''.join(s) 
    for k in range(0, len(s), 60): 
     f.write('%s\n' % (s[k:k+60])) 
    f.write('\n') 

f.close 

Popen(["formatdb", "-p", "T", "-i", "vdatabase.fasta"]).wait() 
+0

Welches Betriebssystem haben Sie? Wo sind einige ähnliche Fehler in Gentoo, versuchen Sie zum Beispiel diese Antwort zu verwenden, um Ihr Problem zu lösen http://schwobeseggl.de/2009/08/04/gentoo-portage-python/. Ihr Problem ist, dass, wenn Sie es manuell ausführen - Sie starten es von X-Umgebung, aber Cron funktioniert ohne X-Server ... –

Antwort

27

#!/usr/bin/env python 

an den Anfang Ihres Skripts - im Moment versucht es, Ihr Skript als Bash auszuführen, in der Zeile steht: "Ich bin ein Python-Skript, bitte verwenden Sie den richtigen Interpreter". Es wird auch als Hash-Bang-Zeile bezeichnet, aber es muss die erste Zeile in Ihrem Skript sein.

+2

D'oh ich habe die Grundlagen vergessen, danke für die Erinnerung an mich – Phil

+5

Das ist mir ein paar Mal passiert - und Wie du, ich konnte das Offensichtliche nicht sehen, hoppla. Manchmal ist ein anderes Augenpaar von unschätzbarem Wert. –

+0

Awesome Sachen - nur hinzufügen, dass Shebang Linie rettete mir einen ganzen Tag Haare ziehen. Danke :) –