2015-09-29 3 views
0

У меня возникли проблемы с выполнением скрипта Ruby с моим кодом Python.Невозможно выполнить скрипт Ruby в скрипте Python

У моего сервера есть задание cron, которое должно выполнять скрипт Python и скрипт Ruby. Тем не менее, сценарий рубина должен быть выполнен после того, как питон один, так что я решил добавить строку:

os.system("ruby /home/username/helloworld.rb") 

в конце сценария Python.

Он работает, но я получаю эту ошибку в файле журнала:

/bin/sh 1: ruby not found 

я не уверен, почему это происходит; Я пробовал называть ту же самую функцию в консоли Python, а также запускать скрипт Python вручную, и оба работают отлично. Другими словами, эта строка кода не работает ТОЛЬКО, когда скрипт запускается cron.

Возможно, есть что-то еще, что мне нужно, чтобы установить скрипт crontab/Python?

+2

Я предполагаю, что cron работает с другим параметром PATH, чем вы. Я бы начал с того, что пытался указать полный путь к ruby, а не просто называть его так. – rje

+0

@rje спасибо, что я должен был сделать! Не помню, я использовал 'rbenv', пока не упомянул настройку PATH. Если вы хотите, пожалуйста, ответьте на вопрос, и я буду отмечать его как правильный ответ. – ddolce

ответ

0

Cron передает только ограниченное количество переменных окружения в вашу работу. Согласно CRONTAB(5) Man Page:

  • SHELL установлен в /bin/sh
  • PATH установлен в /usr/bin:/bin
  • LOGNAME и HOME устанавливаются из /etc/passwd линии владельца CRONTAB в.

HOME, PATH и SHELL могут быть переопределены параметрами в кронтаб; LOGNAME не может.

Так что, если ваш ruby исполняемый файл не находится ни в /usr/bin или /bin хрон не может найти его по умолчанию.

Внутри crontab можно указать PATH, чтобы включить исполняемый файл ruby.

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

17 * * * * python my_ruby_calling_script.py 
+0

Существуют ли двоеточия, чтобы отделить все потенциальные «ПУТЫ»? Означает ли это, что 'cron' будет искать все 4 местоположения, прежде чем возвращать ошибку' not found'? – ddolce

+0

'PATH' содержит список каталогов, разделенных двоеточиями, в которых ваша система ищет исполняемые файлы. Так да! –