2010-07-26 2 views
10

Когда я исполню мой питон скрипт из командной строки У меня нет никаких проблем, как так:Crontab не побежит питон скрипт

[с.в. @ med240-183 дб] $ питон formatdb.py
[с.в. @ med240 -183 дБ] $

Когда я пытаюсь использовать кронтаб, чтобы запустить сценарий каждую полночь я получаю серию ошибок:

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

каталог моего сценария выглядит следующим образом:

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

Crontab выглядит следующим образом:

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 

и мой питон скрипт выглядит следующим образом:

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

Какая операционная система у вас есть? Где некоторые подобные ошибки в gentoo, попробуйте использовать, например, этот ответ, чтобы решить вашу проблему http://schwobeseggl.de/2009/08/04/gentoo-portage-python/. Ваша проблема в том, что когда вы запускаете его вручную - вы начинаете его с X-окружения, но cron работает без X-сервера ... –

ответ

27

Добавить

#!/usr/bin/env python 

к началу вашего скрипта - прямо сейчас он пытается выполнить ваш скрипт как bash, эта строка говорит: «Я скрипт python, пожалуйста, используйте правильный интерпретатор». Его также называют линией хеширования, но она должна быть первой строкой в ​​вашем скрипте.

+2

D'oh Я забыл основы, чтобы напомнить мне – Phil

+5

Это случилось со мной несколько раз - и как вы, я не мог видеть очевидного, вопль>. <иногда другая пара глаз неоценима. –

+0

Удивительные вещи - просто добавив, что линия shebang спасла меня целый день притягивания волос. Спасибо :) –

Смежные вопросы