почему #!/usr/bin/env ruby ​​не работает в crontab?

Я установил ruby ​​​​с помощью rvm (для всей системы) и правильно работал через обычную консоль, и моя программа rails ведет себя правильно как с rails runner, так и с apache2+passenger.

Теперь в crontab, я вызвал rails runner foo.bar, он сдается, внимательно изучите журнал, я вижу, что:

/usr/bin/env: ruby: No such file or directory

Кто-нибудь знает, почему /usr/bin/env не работает в crontab?


person c2h2    schedule 09.03.2011    source источник


Ответы (3)


Если вы установили ruby ​​через rvm, вероятно, ruby ​​не находится в /usr/bin. В зависимости от того, где установлен rvm:

bash -c "source /usr/local/lib/rvm" && rails runner foo.bar

Вы, вероятно, добавили источник */rvm в свой bashrc, который является правильным скриптом загрузки rvm.

person drewrobb    schedule 09.03.2011
comment
Я выяснил причину, почему: рубин не зарегистрирован в оболочке crontab. И я сделал следующее: /bin/bash -c source /usr/local/rvm/src/rvm/scripts/rvm && /root/a/a_rails/script/rails runner Foo.bar - person c2h2; 09.03.2011

ваш cron не наследует вашу среду. попробуйте повторить "$PATH" в файле, чтобы увидеть, что он установлен.

Вы также можете просто сделать "PATH=/usr/bin/ruby && foo.rb"

person Cliff    schedule 09.03.2011
comment
Это должно было быть /usr/bin/ruby foo.rb? Установка $PATH для имени файла вместо списка каталогов не будет работать очень хорошо. - person geekosaur; 09.03.2011

У меня была аналогичная проблема. Кажется, что Cron запускает команды по умолчанию без использования настроек PATH, которые вы ожидаете для пользователя (при входе в систему как этот пользователь). На самом деле, казалось, что он даже не использует какие-либо настройки PATH по умолчанию (будь то в /etc/profile или где-либо еще).

Я смог найти проблему, используя следующие команды (первая из них — это то, как cron запускает команды):

su -c 'printenv ПУТЬ' userX

С выводом: /usr/local/bin:/usr/bin:/bin:/usr/games

su -l userX -c 'printenv PATH'

С выводом: /opt/ruby-enterprise-1.8.7-2010.02/bin/:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/usr/local/bin:/usr/bin:/bin: /USR/игры

Первая команда, похоже, никаким образом не заполняет переменную PATH, кроме системного значения по умолчанию. В моем случае я решил это, просто добавив необходимый (REE) путь к: /etc/login.defs, который по умолчанию выглядит следующим образом:

/etc/login.defs:103:ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/games

person vdB    schedule 11.03.2011
comment
вам нужно предоставить все ruby ​​env, если вы используете rvm, вам нужно экспортировать всю информацию GEM, GEM_HOME и PATH - person c2h2; 28.11.2011