Мой скрипт запускается Rake не работает правильно при запуске через cron - PullRequest
5 голосов
/ 18 марта 2012

Я написал скрипт Rake, который должен автоматически запускаться с Crontab. Сценарий работает нормально при вводе в командной строке, но не работает правильно внутри cron.

Сценарий выглядит так:

#!/bin/sh

echo `date`
cd /home/mick/myapp/current
rake RAILS_ENV=production mynamespace:myaction

Настройка crontab выглядит следующим образом:

10 0,6,12,18 * * * /home/mick/work/launch.sh >> /home/mick/work/launch.log

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

Mar 18 18:10:01 CRON[21773]: (mick) CMD (/home/mick/work/launch.sh >> /home/mick/work/launch.log)
Mar 18 18:10:01 CRON[21772]: (CRON) error (grandchild #21773 failed with exit status 127)
Mar 18 18:10:01 postfix/sendmail[21776]: fatal: open /etc/postfix/main.cf: No such file or directory
Mar 18 18:10:01 CRON[21772]: (mick) MAIL (mailed 1 byte of output; but got status 0x004b, #012)

РЕДАКТИРОВАТЬ :

Благодаря комментарию @Holger Just, я нашел эту ссылку , которая помогла мне получить рабочий скрипт.

Вот обновленная версия моего скрипта

#!/usr/bin/env bash # UPDATED TO GET ACCESS TO 'source'

export PATH=blabla # NOT SURE THIS HELPED AS IT WAS MY FIRST MODIF AND DIDN'T FIX
source /home/mick/.rvm/environments/default # LOADING RVM TO MAKE THINGS WORK
echo `date`
cd /home/mick/myapp/current
rake RAILS_ENV=production mynamespace:myaction

1 Ответ

4 голосов
/ 18 марта 2012

Cron обычно имеет очень ограниченный $PATH.Таким образом, вы можете установить $PATH поверх вашего скрипта или использовать полные пути.Вы можете установить путь в вашем скрипте как

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

Конечно, вам, вероятно, нужно адаптировать $PATH.Например, вы можете использовать оболочку входа вашего root пользователя.Вы можете получить это, запустив echo $PATH.

Также обратите внимание, что если вы используете RVM, вам необходимо явно загрузить его в свой скрипт cron, поскольку cron не загружает rvm (или любые другие сценарии инициализации оболочки) с помощьюпо умолчанию.

...