Я использую backup_fu для резервного копирования своей базы данных. В crontab у вас есть эта команда:
* * * * * cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env rake backup
Да, я знаю, что резервное копирование в минуту - это интенсивно, но я делаю это просто для проверки. Я изменю интервал, когда он заработает.
Примечание:
Linux version 2.6.18-194.8.1.el5.028stab070.5 (root@rhel5-build-x64) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Fri Sep 17 19:10:36 MSD 2010
/var/log/cron
и вроде запускается: Feb 27 00:20:01 amplify crond[1667]: (ramon) CMD (cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env /usr/bin/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, он сказал, что это будет работать, только если:
Похоже, что в 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