2013-12-04 2 views
7

Crontab -l, по-видимому, не работает. Скрипт, выполняемый вручную, отлично работает. Здесь ошибка я вижуCrontab не работает рубиновый скрипт

Dec 3 20:12:01 dahlia /USR/SBIN/CRON[13912]: (gigawatt) CMD (/bin/sh -c "(export PATH=/usr/bin:/bin; /home/gigawatt/drbronnersbot/drbronnersbot.rb)") 
Dec 3 20:12:01 dahlia /USR/SBIN/CRON[13910]: (CRON) error (grandchild #13912 failed with exit status 1) 

А вот это кронтаб:

* * * * * /bin/sh -c "(export PATH=/usr/bin:/bin; /home/gigawatt/drbronnersbot/drbronnersbot.rb)" 

Разрешение полностью открыто, его исполняемый файл, я поставил путь ENV в начале файла, до сих пор нет игральная кость.

+1

если вы используете RVM вам могут понадобиться для начальной загрузки вашего кронтаба с РВМ установки хрон – bjhaid

+0

/home/gigawatt/.rvm/rubies/ruby- 2.0.0-p247/bin/ruby, который также находится в верхней части моего рубинового файла '#!/Home/gigawatt/.rvm/rubies/ruby-2.0.0-p247/bin/ruby' –

ответ

10

Редактировать: Я просто заметил, что пользователь ответил на свой собственный пост, но я оставлю это на случай, если кто-то споткнется здесь с подобной проблемой. Я нашел, что это полезно для некоторых.

Я столкнулся с этим и обнаружил, что это решение для скриптов Ruby.

Ruby необходимо выполнить в конкретной среде. RVM обрабатывает это путем поиска файла среды ruby ​​для конкретной версии ruby, которая задает все необходимые переменные среды. Например, если у вас есть рубин 1.9.3 патч 448, вы можете посмотреть на файл среды, выполняющиеся:

cat /usr/local/rvm/environments/ruby-1.9.3-p484 

export PATH="/usr/local/rvm/gems/ruby-1.9.3-p484/bin:/usr/local/rvm/gems/ruby[email protected]/bin:/usr/local/rvm/rubies/ruby-1.9.3-p484/bin:$PATH" 
export GEM_HOME='/usr/local/rvm/gems/ruby-1.9.3-p484' 
export GEM_PATH='/usr/local/rvm/gems/ruby-1.9.3-p484:/usr/local/rvm/gems/[email protected]' 
export IRBRC='/usr/local/rvm/rubies/ruby-1.9.3-p484/.irbrc' 
unset MAGLEV_HOME 
unset RBXOPT 

(Примечание:. Моя установка РВМ была под /usr/local/.., но ваш может быть в другом месте Используйте which ruby на рисунок где установлен ваш рубин)

Здесь вы можете увидеть, что он устанавливает PATH и некоторые другие важные переменные среды. Когда вы набираете rvm use ruby-1.9.3-p448, rvm фактически передает этот файл в фоновом режиме.

Выполнение Cron - это неинтерактивные сеансы, что означает, что у них нет «живого» пользователя во время сеанса перед сеансом. Когда вы делаете это вручную и запускаете интерактивный сеанс, все это заботится о вас, но для неинтерактивного сеанса он не знает, что такое оболочка или где находится путь к среде. Может быть, кто-то с большим количеством знаний может дать техническое объяснение, почему.

В любом случае, чтобы обойти это, добавьте это в верхнюю части кронтаба:

SHELL=/bin/bash 
BASH_ENV=/home/gigawatt/.bashrc 

* * * * * /home/gigawatt/.rvm/rubies/ruby-2.0.0-p247/bin/ruby /home/gigawatt/drbronnersbot/drbronnersbot.rb 

Это говорит пользователю неинтерактивную хрон, какая оболочка использовать, а затем дать его источник файла .bashrc. Что находится в файле .bashrc? Хороший вопрос, вы должны добавить эту строку -

source /usr/local/rvm/environments/ruby-1.9.3-p484 

(Опять же, замените свой собственный путь рубина) В основном вы вручную поиске файлов среда, которая РВМ бы источников для вас. Это способ заставить cron использовать определенную среду драгоценных камней или gemset.

Он должен работать с этими двумя изменениями.

1

Вы пробовали:

* * * * * /home/gigawatt/.rvm/rubies/ruby-2.0.0-p247/bin/ruby /home/gigawatt/drbronnersbot/drbronnersbot.rb 
+0

да у меня есть, такой же выпуск. –

+0

Попробуйте использовать полный путь RVM, как указано выше, вы не сказали, что используете rvm. –

+0

Nope same issue 'Dec 4 12:58:01 dahlia/USR/SBIN/CRON [16513]: (gigawatt) CMD (/home/gigawatt/.rvm/rubies/ruby-2.0.0-p247/bin/ruby/home/gigawatt/drbronnersbot/drbronnersbot.rb) 4 декабря 12:58:01 ошибка dahlia/USR/SBIN/CRON [16512]: (CRON) (внук # 16513 с статусом выхода 1) ' –

2

решаемые его, я звонил два файла в моем коде, и он не мог найти эти файлы. Я редактирую файл .rb, чтобы включить полный путь, и теперь он отлично работает. Всем спасибо!

7

Я получил это работает, используя

* * * * * /bin/bash -l -c 'ruby my-ruby-file.rb'

+0

Любое лицо, это самый простой способ. – Strobes

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