2013-06-25 2 views
0

EDIT 2 27/06/2013: Проблема была глупой ошибкой, не связанной с venv и cron. Запуск venv из cron с тем же пользователем, который создал venv, отлично работает, используя активированный desscribed ниже.Cron & Virtualenv: Cron не запускает скрипт python, требующий virtualenv

EDIT 25/06/2013: Поскольку nohup.out не изменился после запуска cron, я подозреваю, что проблема заключается в использовании virtualenv. cron устанавливается с тем же пользователем, что и тот, который запускает скрипт из командной строки.


Я написал сценарий для активации venv, а затем запустил скрипт python. Он прекрасно работает из командной строки, когда я

nohup /home/heyheyhey/run.sh & 

Однако для некоторых черных магических причин, питон часть не запускается из хрон:

0 4 * * * /home/heyheyhey/run.sh & 

Содержание run.sh:

#! /bin/bash 
cd /home/heyheyhey 
. /home/heyheyhey/.pythonbrew/venvs/Python-2.7.2/venvname/bin/activate 2> error.log 
python /home/heyheyhey/top.py 2> error.log 
bzip2 -c "Exporter.csv" > "extraction.csv.bz2" 

Запуск run.sh выполняется с созданием сжатого файла вывода. Однако сценарий python не работает, поскольку Exporter.csv не обновляется, и я не вижу активности в файле журнала.

Благодарим за помощь!

+0

Нет необходимости использовать 'nohup' или' & 'в задании cron. 'nohup' не требуется, потому что нет терминала для разъединения, а' & 'не требуется, потому что все в cron эффективно находится в фоновом режиме. – Barmar

+0

Да, я согласен, но я пробовал с и без nohup, и нет никаких различий, скрипт python все еще не запускается! – antoinet

+0

Я никогда не говорил, что это будет иметь значение, я просто сказал, что это необязательно. – Barmar

ответ

2

Окружающая среда задания cron часто отличается от среды, которую вы видите , когда вы вошли в интерактивную оболочку. В частности, вы можете указать , проверьте, работает ли интерпретатор python в $ PATH для задания cron. Если ваша программа python считывает любые переменные среды, вы должны также проверить их на , чтобы они были установлены как ожидается в cron.

+1

Также не забудьте проверить 'nohup.out', файл журнала, который' nohup' перенаправляет stdout/stderr на. Вероятно, у него есть куча сообщений об ошибках. –

+0

Фактически, по крайней мере, на OS X, 'nohup' сам по себе не находится по умолчанию для заданий cron. –

+0

Хорошая идея, но nohup.out не изменился с момента последнего запуска скрипта (непосредственно из командной строки) – antoinet

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