Bundle Exec не работает с Crontab

Я пытаюсь выполнить следующий сценарий оболочки с помощью crontab:

#!/bin/sh
cd /mnt/voylla-production/current
bundle exec rake maintenance:last_2_days_orders
bundle exec rake maintenance:send_last_2_days_payment_dropouts

Запись в crontab

0 16 * * * /mnt/voylla-production/releases/20131031003111/voylla_scripts/cj_4pm.sh

Я получаю следующее сообщение об ошибке по почте:

/mnt/voylla-staging/current/voylla_scripts/cj_4pm.sh: line 3: bundle: command not found
/mnt/voylla-staging/current/voylla_scripts/cj_4pm.sh: line 4: bundle: command not found

Я не получаю ошибку, когда я запускаю команды вручную. Не уверен, что здесь происходит. Может ли кто-нибудь, пожалуйста, указать.

Спасибо

2 ответа

Решение

Хорошим трюком для правильной настройки всей среды в crontab является использование /bin/bash -l:

0 16 * * * /bin/bash -l -c '/mnt/voylla-production/releases/20131031003111/voylla_scripts/cj_4pm.sh'

-l опция вызовет полную оболочку входа в систему, таким образом, прочитав ваш файл bashrc и все настройки пути / rvm, которые он выполняет.

Если вы хотите упростить управление crontab и использовать этот прием - как и другие - не думая о них, вы можете использовать гем Everyever. Это также очень хорошо работает с Capistrano, если вы используете его, регенерируя crontab при развертывании.

Пользователь, используемый cron, не имеет правильной среды. Вы можете сказать cron, какого пользователя использовать. Для скрипта bash вы можете сделать что-то вроде:

#!/bin/bash --login
source /home/user/.bashrc
rvm use 2.0.0@gemset #if you use rvm
cd /path/to/project && bundle exec xyz

Нам нужно указать правильный путь к нашему бандлу:

#!/bin/sh
cd /mnt/voylla-production/current
/home/youruser/.rbenv/shims/bundle exec rake maintenance:last_2_days_orders
Другие вопросы по тегам