2010-06-16 2 views
1

Когда я выполнить задачу граблей вручную, она работает нормально, но когда я ставлю ту же команду в Cron ничего не происходит:Рубин на рельсы - Rake задача не работает через Cron

cd /path/to/my/rails/app && rake daily_import 

Журнал Крон указывает, что команда были вопросы:

CMD (cd /path/to/my/rails/app && rake daily_import) 

Рек журналы задача об ошибках и сообщениях об успешной работе, но ничего не записываются в журнал, ничего не делается вообще. Однако, если я копирую и вставляю текст CMD с тем же пользователем, что Cron запускает команду, все работает нормально.

Я предполагаю, что выполнение задачи в Cron должно быть таким же, как и для ввода в себе, это правильно?

ответ

2

Ищите почту, которую демона cron могла отправить пользователю, под которым выполняется задание cron. Если задание cron выводит на stderr или stdout, демона cron отправит его владельцу владельца задания cron. Если что-то пойдет не так (возможно, из-за проблемы PATH, например, о том, что предлагает Rob), вы можете увидеть полезное сообщение об ошибке в электронном письме от демона cron.

0

Является ли рейк в PATH пользователя cron для запуска этой оболочки?

+0

Вы можете попытаться иметь полный путь к загребать вашу задачу (например,/USR/бен/рейки). Кроме того, вам может потребоваться указать среду рельсов с помощью RAILS_ENV = production. – elektronaut

+0

Он не был установлен, но после его добавления я все равно получаю тот же результат. Также попробовал предложение электрона, тот же результат. – jhamburg

0

Я использую следующий формат для выполнения задач грабли, немного более четко с путями

0 * * * * /usr/bin/rake -f /path/to/Rakefile daily_import RAILS_ENV=production 

Я также хотел бы перенаправить вывод в файл, так что я могу проверить ошибки

0 * * * * /usr/bin/rake -f /path/to/Rakefile daily_import RAILS_ENV=production > ~/daily_import.log 2>&1 
0

В случае, если кто-то смотрит на это с помощью Rails 3.2 <> 4.0, мне пришлось использовать это в моем кронтабе:

0 * * * * BUNDLE_GEMFILE=/path/to/rails/Gemfile /path/to/bin/bundle exec rake -f /path/to/rails/Rakefile db:hive_enrich RAILS_ENV=production > /var/log/rake_tasks.log 2>&1 & 
5

Эта вещь работала для меня

* * * * * /bin/bash -l -c 'cd /path/to/my/rails/app && RAILS_ENV=production bundle exec rake daily_import' 

Вы должны указать/bin/Баш -l -c перед вашей задачи.

1

Следующее решение работало для меня для интеграции Rails 3 и rvm. Я просто выполнить Баш скрипт:

0 * * * * rvmuser /bin/bash -l -c '/path/to/my/bashscript > /tmp/script.log' 

Это не похоже на работу без /bin/bash -l -c части.

Затем мой Баш скрипт выглядит следующим образом, в соответствии с rvm documentation:

#!/usr/bin/env bash 

RAILS_ENV=production 

source /var/www/rvmuser/.rvm/environments/ruby-1.9.3-p484 

cd /path/to/my/rails_app 

rake do:whatever 
Смежные вопросы