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 и использовать этот трюк - а также другие - без необходимости думать о них, вы можете использовать всякий раз, когда gem. Он также очень хорошо играет с 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