2016-08-19 3 views
-3

Я написал скрипт python, который читает несколько журналов, а затем записывает необходимую информацию в файл csv. Он работает нормально, если я выполняю его вручную с помощью python . Однако, когда я называя это cron, что он не работает. Я пробовал:Не удалось выполнить скрипт Python при установке на crontab

* * * * * python /path/to/myscript.py 
* * * * * /path/to/myscript.py 
* * * * * /usr/bin/python /path/to/myscript.py 

После нескольких неудачных попыток я вставил питон myscript.py в сценарии оболочки и запустил его вручную, он работал, но опять же в хронах это не так.

+1

_I написал питона script_ Где ваш соответствующий код? –

+0

Что бы ни было в сценарии python, не имеет значения. Проблема в том, что оболочка по умолчанию для cron не '/ bin/bash' – ElmoVanKielmo

+0

Предполагаю, что вы используете какую-то форму linux. Выполняется ли ваш скрипт python? Вы помещали '#!/Path/to/python' в первую строку? (Это, вероятно, будет '#!/Usr/bin/python' в вашем случае.) – Alex

ответ

0

По умолчанию оболочка для cron не /bin/bash, поэтому вам нужно предоставить полный путь к исполняемому файлу Python.
Проверьте вывод which python. На моей машине это /usr/bin/python.
Предполагая это, ваша хрон запись работа должна быть:

* * * * * /usr/bin/python /path/to/myscript.py 

Иногда вы хотите использовать virtualenv или установить некоторые переменные окружения или изменить рабочий каталог, прежде чем запустить скрипт.
В таком случае это удобно, чтобы создать сценарий оболочки в Баш:

#!/bin/bash 
# Change working directory 
cd /path/to 
# Activate Python virtual environment 
source bin/activate 
# Set some environment variable 
export LOG_FILE_PATH="/var/log/whatever.log" 
# Finally run your python script 
python myscript.py 

Учитывая, что вы сохраните выше скрипт для /path/to/myscript_wrapper.sh, ваша хрон запись работа будет выглядеть следующим образом:

* * * * * /bin/bash /path/to/myscript_wrapper.sh 
+0

Пробовал это уже. Не полезно :) – Piku

+0

Также второе решение? – ElmoVanKielmo

+0

..если вы уже пробовали, у вас должно быть сообщение журнала, нет? Что это говорит? – nlsdfnbch

0

Убедитесь, что вы не используете какие-либо относительные пути внутри вашего скрипта python. Это может привести к тому, что ваш скрипт завершится с ошибкой.

Поэтому убедитесь, что в вашем скрипте вы не используете ../to/something, но вместо этого /path/to/something.

т.е.

with open('../file.txt', 'r') as f: 

должен стать

with open('/full/path/to/file.txt', 'r') as f: 
+0

Да, я использую только абсолютный путь. – Piku

+1

Абсолютные пути жесткого кодирования в сценариях Python - не очень хорошая идея. Представьте, что вы разворачиваете его на производственный сервер, и вы увидите ошибку, например, «Нет такого файла или каталога:/home/j4ck/...» сразу, вы можете не запускать службы, созданные вами от имени вашего пользователя unix и поэтому весь код вашей службы и соответствующие файлы будут помещаться в другую директорию, чем ваш домашний каталог. – ElmoVanKielmo

+1

Правда, если бы это был такой случай, я бы по-прежнему не рекомендовал '..' - скорее что-то вроде' os.abspath (__ file __) 'и работать вместо этого. Но я мог бы быть заклеймен прошлыми неприятностями, которые у меня были с этим и работами cron, и у меня нет большого опыта развертывания в зарубежных системах. – nlsdfnbch

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

  • Нет связанных вопросов^_^