Назад | Перейти на главную страницу

Сбой задачи Rake при запуске в cron

Я использую backup_fu для резервного копирования своей базы данных. В crontab у вас есть эта команда:

* * * * * cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env rake backup

Да, я знаю, что резервное копирование в минуту - это интенсивно, но я делаю это просто для проверки. Я изменю интервал, когда он заработает.

Примечание:

Любая помощь приветствуется, спасибо!

Похоже, что это стало проблемой RVM, а не сервером. Я извиняюсь. Спасибо за ответы; они помогли мне разобраться.

Последний, который сработал, был:

cd /var/www/amplify/current && source /home/ramon/.rvm/environments/ree-1.8.7-2010.02@rails3 && RAILS_ENV=production /home/ramon/.rvm/gems/ree-1.8.7-2010.02@rails3/bin/rake backup &>/home/ramon/backup.log

Ключом было использовать source /home/ramon/.rvm/environments/ree-1.8.7-2010.02@rails3.

Когда я спросил Уэйна Сегина о том, чтобы войти в каталог и автозагрузить .rvmrc, он сказал, что это будет работать, только если:

  • RVM правильно загружается как функция (тип rvm | head -1)
  • .Rvmrc ранее пользовался доверием

Похоже, что в cron RVM не загружается должным образом как функция, поскольку раньше я «доверял» .rvmrc.

Вы проверили почту для учетной записи, на которой выполняется задание cron, выходные данные команды должны появиться там и могут содержать подсказки относительно проблемы.

Сохраните вывод команды в файл add &>/path/to/logfile до конца команды, чтобы узнать, что происходит.

Это:

/usr/bin/env rake backup

зависит от PATH содержащий местонахождение rake. Это то же самое, что просто иметь

rake backup

Среда для cron отличается от вашего интерактивного сеанса. Измените строку в вашем crontab, чтобы она указывала прямо на rake исполняемый файл:

* * * * * cd /var/www/amplify/current && RAILS_ENV=production /path/to/rake backup

или установите свой crontab PATH (в crontab), чтобы включить его:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/path/to/where/rake/is

Настройка PATH в вашем crontab не очень переносимо, я предлагаю вам сделать что-то вроде этого:

~ $ rvm env --path                                                                                                                                  
/Users/james/.rvm/environments/ruby-1.9.3-p392

Что в этом файле:

~ $ cat `rvm env --path`                                                                                                                            
export PATH ; PATH="/Users/james/.rvm/gems/ruby-1.9...

Итак, мы можем сделать это:

~ $ crontab -e
0 * * * * source /Users/james/.rvm/environments/ruby-1.9.3-p392 && command
# or 
0 * * * * rvm use 1.9.3@myenv && source `rvm env --path` && command

Поместите свою cronjob в отдельный скрипт и вызовите его в crontab.

cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env rake backup