2010-07-26 32 views
10

Khi tôi thực hiện kịch bản python của tôi từ dòng lệnh tôi không có vấn đề như vậy:Crontab sẽ không chạy python script

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

Khi tôi cố gắng sử dụng crontab để chạy các script mỗi nửa đêm tôi nhận được một loạt các lỗi:

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

thư mục kịch bản của tôi được như sau:

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

Crontab trông giống như:

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 

và kịch bản python của tôi trông giống như:

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

Bạn có hệ điều hành nào? Một số lỗi tương tự trong gentoo, hãy thử sử dụng ví dụ câu trả lời này để giải quyết vấn đề của bạn http://schwobeseggl.de/2009/08/04/gentoo-portage-python/. Vấn đề của bạn là khi bạn đang chạy nó theo cách thủ công - bạn bắt đầu từ môi trường X, nhưng cron hoạt động mà không có máy chủ X ... –

Trả lời

27

Thêm

#!/usr/bin/env python 

vào đầu tập lệnh - ngay bây giờ, nó đang cố gắng thực thi tập lệnh của bạn dưới dạng bash, dòng đó nói "Tôi là tập lệnh python, vui lòng sử dụng trình thông dịch đúng". Nó cũng được gọi là một dòng băm-bang, nhưng nó cần phải là dòng đầu tiên trong kịch bản của bạn.

+2

D'oh tôi quên cơ bản cảm ơn đã nhắc tôi – Phil

+5

Điều đó đã xảy ra với tôi một vài lần - và giống như bạn, tôi không thể thấy rõ ràng, những cái vòng> đôi khi một cặp mắt khác là vô giá. –

+0

Công cụ tuyệt vời - chỉ cần thêm dòng shebang đó đã giúp tôi tiết kiệm cả ngày. Cảm ơn :) –

Các vấn đề liên quan