Я пытаюсь заставить свой crontab запускать несколько задач rake для приложения rails, но, похоже, он всегда выходит со статусом 127, в моем системном журнале это выглядит так:
Jun 7 05:10:01 ip-10-170-122-226 CRON[15664]: (deploy) CMD (cd /home/deploy/apps/dashboard/current && bundle exec rake some:task
Jun 7 05:10:01 ip-10-170-122-226 CRON[15662]: (CRON) error (grandchild #15664 failed with exit status 127)
Кажется, что 127 похоже на "ошибка не найдена команда" или что-то в этом роде, поэтому я использовал полные пути к корзинам, даже если пакет был /usr/local/bin/bundle
, Задача отлично работает вне cron, просто запустив ее в оболочке.
Мой crontab просто:
*/10 * * * * cd /home/deploy/apps/dashboard/current && bundle exec rake some:task
Может быть, мой crontab нужен #!/usr/bin
или что-то наверху?
Обновить
Чтобы просто проверить это, похоже, он работает нормально:
*/1 * * * * /usr/bin/touch /home/deploy/cron-test.txt
Это заставляет меня думать, что это как переменная PATH, но я не знаю, как получить там правильные пути, какие-либо мысли?
Статус выхода 127 устанавливается bash, когда он не может найти команду (см. Расширенный сценарий Bash). Чтобы упростить отладку, вы должны поместить все в скрипт. Убедитесь, что сценарий исполняемый и начинается с имени и пути интерпретатора:
#! /bin/bash
cd /.../ && next_command
У вас должна получиться строка crontab, похожая на:
*/10 * * * * cd /home/deploy/apps/dashboard/current && /PATH_TO/bundle exec rake some:task
или установите переменную PATH в crontab:
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/PATH_TO_bundle
*/10 * * * * cd /home/deploy/apps/dashboard/current && /PATH_TO/bundle exec rake some:task
Видеть man 5 crontab
как настроить PATH для ваших заданий cron.
Взгляните сюда: http://ubuntuforums.org/showthread.php?t=1760488 возможно, это укажет вам правильное направление.
Обычно с заданиями cron я создаю файл сценария, тестирую сценарий и помещаю его в cron.
Надеюсь, это поможет.