10

When I execute my python script from the command line I have no problems like so:

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

When I try to use crontab to run the script every midnight I get a series of errors:

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

The directory of my script is as follows:

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

Crontab looks like:

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

and my python script looks like:

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()
1
  • What operating system do you have? Where are some similar bugs in gentoo, try to use for example this answer to solve your problem schwobeseggl.de/2009/08/04/gentoo-portage-python. Your problem is that when you are running it manually - you starting it from X enviroment, but cron works without X server... Commented Jul 26, 2010 at 17:17

1 Answer 1

28

Add

#!/usr/bin/env python

to the beginning of your script - right now it's trying to execute your script as a bash, that line says "I'm a python script, please use the right interpreter". It's also called a hash-bang line, but it needs to be the first line in your script.

Sign up to request clarification or add additional context in comments.

2 Comments

That's happened to me a few times - and like you I couldn't see the obvious, whoops >.< sometimes another pair of eyes is invaluable.
Awesome stuff - just adding that shebang line saved me a whole day of hair pulling. Thanks :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.