2010-07-26 8 views
10

Lorsque j'exécute mon script python de la ligne de commande Je n'ai pas de problèmes comme ceci:crontab script python wont exécuter

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

Lorsque je tente d'utiliser crontab pour exécuter le script minuit tous les jours, je reçois une série d'erreurs:

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')' 

le répertoire de mon script est comme suit:

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

crontab ressemble:

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 

et mon script python ressemble à:

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

De quel système d'exploitation disposez-vous? Où sont des erreurs similaires dans gentoo, essayez d'utiliser par exemple cette réponse pour résoudre votre problème http://schwobeseggl.de/2009/08/04/gentoo-portage-python/. Votre problème est que lorsque vous l'exécutez manuellement - vous le démarrez à partir de X environnement, mais cron fonctionne sans serveur X ... –

Répondre

27

Ajouter

#!/usr/bin/env python 

au début de votre script - en ce moment, il essaie d'exécuter votre script en tant que bash, cette ligne dit "Je suis un script python, s'il vous plaît utiliser le bon interpréteur". Cela s'appelle aussi une ligne de hachage, mais cela doit être la première ligne de votre script.

+2

D'oh j'ai oublié les bases merci de me rappeler – Phil

+5

Cela m'est arrivé à plusieurs reprises - et Comme vous, je ne pouvais pas voir l'évidence, parfois une autre paire d'yeux est inestimable. –

+0

Des trucs géniaux - juste ajouter que la ligne shebang m'a sauvé toute une journée de tirant les cheveux. Merci :) –