Назад | Перейти на главную страницу

Cron не работает со статусом выхода 127

Я пытаюсь заставить свой 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.

Надеюсь, это поможет.