Привычка Crontab запускает скрипт Python

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

[Дб rv@med240-183] Python $ formatdb.py
[Дб rv@med240-183] $

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

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

и мой сценарий Python похож:

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()
10
задан Phil 26 July 2010 в 17:06
поделиться

1 ответ

Добавьте

#!/usr/bin/env python

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

27
ответ дан 3 December 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: