PDA

Показать полную графическую версию : [решено] Ошибка вызова route в скрипте, запущенном через crontab


El Scorpio
19-12-2011, 08:09
Добрый день.
Написал скрипт на Bash для автоматического переключения маршрутов, однако столкнулся со странной ошибкой
При запуске скрипта через crontab в полученном по email отчёте вижу следующее
/etc/chroute/chroute.sh: line 40: route: command not found

Вот соответствующий фрагмент кода
## Функция проверки качества линии связи
testroute()
{
route add -host $testserver gw $gateway metric 1 <--------------- строка 40. ошибка
ping $testserver -c $countping 2>&1 | tee $testpingfile
route del -host $testserver <--------------- строка 42. ошибка
testpinglost=$(grep "packets transmitted" $testpingfile | sed 's/[^0-9 ]//g;q' | awk '{print $3;}')
testpingtime=$(grep "rtt min/avg/max/mdev" $testpingfile | sed 's%\/%\ %g' | sed 's/[^0-9 ]//g;q' | awk '{print $2;}' )
if [[ $testpinglost -gt $maxpinglost ]]
then
echo "Обнаружено $testpinglost потерянных пакетов. Связь по данному каналу неустойчива."
echo $(date +%F\ %T)": Потерянных пакетов - $testpinglost" >> $logfile
elif [[ $testpingtime -gt $maxpingtime ]]
then
echo "Время прохождения пакетов по данному каналу $testpingtime превышает разрешённое $maxpingtime ."
echo $(date +%F\ %T)": Время прохождения пакетов по данному каналу - $testpingtime" >> $logfile
else
goodlink=true
echo "Канал связи работает"
fi
}

Аналогичные ошибки происходят далее по тексту - то есть ни один вызов команды route не выполняется. Мол, "нет такой команды"
Однако ошибка эта возникает, только если скрипт вызывается через crontab от имени root. Если запускать скрипт вручную, то команда route выполняется правильно (при запуске через sudo) или выдаёт ошибку о недостаточности прав доступа (при запуске без sudo)

В чём может быть проблема?

lxa85
19-12-2011, 08:22
El Scorpio, посмотреть пути команд PATH для root. Ассоциации команд.
И наверно самое правильное - указывать полные пути для команды. /usr/sbin/route например.

mar
19-12-2011, 09:11
El Scorpio,
lxa85 совершенно прав: для cron-а требуются полные пути и при вызове скрипта, и в самом скрипте. Это такие классические грабли :)

vadblm
19-12-2011, 09:20
Однако ошибка эта возникает, только если скрипт вызывается через crontab от имени root. »
В кроне переменная по умолчанию PATH=/usr/bin:/usr/sbin (для root, для непривилегированного пользователя ещё аскетичнее - PATH=/usr/bin), команда же route живёт в /sbin/, так что либо указывать полные пути для команды »
либо прописывать в кронтабе нужный PATH:

PATH=/usr/bin:/usr/sbin:/sbin
*/10 * * * * /etc/chroute/chroute.sh

El Scorpio
19-12-2011, 09:23
Всем спасибо.
С кроном мало работал, посему об этом не знал

Исправил проблему по методу, предложенному vadblm

Всё работает




© OSzone.net 2001-2012