Rake Task от Crontab? - PullRequest
       25

Rake Task от Crontab?

7 голосов
/ 07 февраля 2011

Stack:

Apache2

Рельсы 2.3.8

RedHat Linux

Ruby Enterprise 1.8.7

Получил следующую грабли в файле crontab пользователя моего приложения, которая предназначена для загрузки записей в таблицу базы данных каждые 15 минут:

*/15 * * * * app_user cd /var/www/apps/my_app/current/ && rake thing:do_stuff RAILS_ENV=production

Я вижу, что демон cron выполняет эту задачу в журнале cron, но таблица базы данных, в которую он должен извлекать записи, не меняется. Эта задача работает без ошибок, когда я запускаю ее вручную в каталоге / var / www / apps / my_app / current и вытягивает записи в таблицу, как я ожидаю.

Я сбросил переменную PATH в crontab для отражения с помощью REE, думая, что путь по умолчанию не будет совпадать с /opt/ruby-enterprise...

Как мне заставить эту задачу rake работать с cron?

Ответы [ 2 ]

10 голосов
/ 15 сентября 2011
0,15,30,45 * * * * /bin/bash -l -c 'cd /var/www/apps/my_app/current && RAILS_ENV=production bundle exec rake thing:do_stuff --silent'
8 голосов
/ 07 февраля 2011

Попробуйте использовать полный путь для разгона двоичного файла (запустите в консоли which rake и замените rake на полный путь).

Например, если which rake возвращает следующий путь:

/Users/bob/.rvm/gems/ruby-1.9.3-p194/bin/rake

Вы должны использовать следующую команду для запуска граблей:

/Users/bob/.rvm/bin/rvm all do bundle exec rake allocator:snapshot

и я предпочитаю всякий раз, когда gem для заданий cron в ruby ​​

Как определить, не удалось ли выполнить задачу в cron? При неудаче cron пытается отправить электронное письмо. Таким образом, вы можете настроить postfix для использования ваших настроек SMTP (например, из Google) и добавить файл ~/.forward, содержащий только вашу электронную почту, в домашний каталог пользователя, который запускает этот cronjob в вашей системе.

...