Я пытаюсь настроить crontab для работы с огурцом. До сих пор я смог заставить crontab выполнить команду ruby, но не команду cucumber.

Вот что я имею в crontab:

          • ~/test.sh> ~/out.log 2> err.log

Если я делаю это в test.sh, он работает нормально:

/ Абсолютный путь к рубину ~/ test.rb

Однако, если я делаю это в test.sh, это не удалось:

/ Абсолютный путь к огурцу ~/ test.feature

Вот что он печатает в err.log:

нет такого файла для загрузки - капибара / огурец (LoadError)

Тем не менее, если я запускаю test.sh (/Absolute-path-to-cucumber ~/test.feature) в терминале, это не проблема.


Итак, я думаю, что cron и терминал не используют одну и ту же версию ruby (следовательно, проблема среды).

Когда я сделал в терминале $ ruby -rpp -e 'pp ENV', он дал мне следующее:

"_" => "/Users/ имя / .rvm / рубины / рубиново-1.9.3-p392 / бен / рубин"

Когда я сделал ту же команду в cron, он дал мне это в файле журнала:

"_" => "/ USR / бен / рубин"

Таким образом, похоже, что cron использует системный ruby (1.8.7), а терминал использует пользовательский ruby (1.9.3). Я пробовал все виды вещей, которые мог найти, чтобы cron использовал ruby 1.9.3, но пока мне не повезло.

Может ли какой-либо орган дать мне подсказку или указание о том, как действовать дальше? Спасибо за помощь.

1 ответ1

0

Путь cron по умолчанию - /usr/bin:/bin а оболочка по умолчанию - /bin/sh . Он не читает никаких файлов конфигурации, таких как .bash_profile.

Не могли бы вы просто добавить . ~/.rvm/scripts/rvm к сценарию?

Или bash -lc запускает оболочку входа в систему, которая читает файлы конфигурации, такие как .bash_profile.

* * * * * bash -lc '~/test.sh > ~/out.log 2> ~/err.log'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .