2009-08-30 2 views
0

У меня есть задание cron для запуска скрипта Ruby, который отлично работает в командной строке (от пользователя пользователя), но cron терпит неудачу, потому что он не может найти рубиновый камень TMail. Я вручную установил камень tmail в свой файл ~/.gems/dir, указанный моим скриптом ~/.bashrc, как suggested от Nate.Вызов Rubygem tmail из Dreamhost CRONjob

При вызове вручную из командной строки (на Deadpool сервере)

./home/user/site.com/appdir/testbalances.sh

работает отлично, но из CRONTAB сети -interface (та же команда), я получаю журнал почты:

/usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in gem_original_require': no such file to load -- tmail (LoadError) from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in требуют» от afschriftmonito г/statement_monitor.rb: 7

Строки 6 и 7 из файла afschriftmonitor/statement_monitor.rb: 7 являются

требуют 'RubyGems' требуют 'tmail'

It кажется, что CRON работает с другого сервера или игнорирует файл ~/.bashrc? Как я могу это исправить? Кажется, что у Dreamhost есть определенная проблема, потому что сценарий работает нормально на моем Mac, и, как сказано, отлично от моей учетной записи оболочки Dreamhost. Я озадачен.

ответ

1

Эти проблемы всегда являются несоответствием между средой оболочки и средой cron. Смотрите эту страницу для различных предложений: Does your cron script run in a bash shell, but not while running under crontab?

+0

Хорошее предложение, я попробовал его и добавил .bashrc в bashscript, который вызывает вызов ruby. Не помогло :-( –

+0

На самом деле это было. Было замешательство в отношении сервера, на котором он работал в Dreamhost, что привело к смешанным сигналам, но этот ответ решил оригинальную проблему. Спасибо за ваши комментарии по моему ответу! –

1

Fixed это сам: оказалось, что это/была проблема 2-часть:

  • Dreamhost работает это CRON (как и любой другой CRON AFAIK) из ш оболочки, тогда как мое тестирование консоли было выполнено из оболочки Bash.
  • CRON загружает различные настройки среды, чем ваша консольная оболочка, как указал Гленн.

Комбинируя их мне удалось решить эту проблему с помощью:

  1. Дублирование мой ~/.bashrc в ~/.shrc файл (набор для CHMOD + х)
  2. Добавление следующих строка вверху моего сценария bash, зажженная от CRON:

    . ~/.shrc

Проверка правильной среды просто путем добавления вызова env внутри сценария.

+0

Если вы используете, re sourcing файл, нет необходимости, чтобы он был исполняемым, просто читаемым. –

+0

Может быть поучительно запускать «env; set» в качестве задания cron, чтобы посмотреть, что такое среда сервера. –