Crontab l'habitude d'exécuter un script python
Quand j'execute mon script python en ligne de commande je n'ai pas de problèmes de la sorte:
[rv@med240-183 db]$ python formatdb.py
[rv@med240-183 db]$
Lorsque j'essaie 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()
Quel système d'exploitation avez-vous? Où sont quelques bugs similaires dans gentoo, essayez de les utiliser, par exemple, cette réponse pour résoudre votre problème, schwobeseggl.de/2009/08/04/gentoo-portage-python. Votre problème, c'est que lorsque vous exécutez manuellement - vous à partir de X de l'environnement, mais cron fonctionne sans serveur X...
OriginalL'auteur Phil | 2010-07-26
Vous devez vous connecter pour publier un commentaire.
Ajouter
au début de votre script à droite maintenant, il essaie d'exécuter votre script comme bash, cette ligne dit "je suis un script python, veuillez utiliser le droit de l'interprète". Il est aussi appelé hash-bang, mais il doit être la première ligne de votre script.
Ça m'est arrivé une fois et comme vous je ne pouvais pas voir l'évidence, oups >.< parfois, une autre paire d'yeux est d'une valeur inestimable.
Génial trucs - tout en ajoutant que la ligne shebang m'a sauvé d'une journée entière de se tirer les cheveux. Merci 🙂
Super réponse, vous m'avez sauvé 🙂
OriginalL'auteur