Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   [решено] Ошибка вызова route в скрипте, запущенном через crontab (http://forum.oszone.net/showthread.php?t=223262)

El Scorpio 19-12-2011 08:09 1817760

Ошибка вызова route в скрипте, запущенном через crontab
 
Добрый день.
Написал скрипт на 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 1817763

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

mar 19-12-2011 09:11 1817780

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

vadblm 19-12-2011 09:20 1817785

Цитата:

Цитата El Scorpio
Однако ошибка эта возникает, только если скрипт вызывается через crontab от имени root. »

В кроне переменная по умолчанию PATH=/usr/bin:/usr/sbin (для root, для непривилегированного пользователя ещё аскетичнее - PATH=/usr/bin), команда же route живёт в /sbin/, так что либо
Цитата:

Цитата lxa85
указывать полные пути для команды »

либо прописывать в кронтабе нужный PATH:
Код:

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


El Scorpio 19-12-2011 09:23 1817786

Всем спасибо.
С кроном мало работал, посему об этом не знал

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

Всё работает


Время: 05:28.

Время: 05:28.
© OSzone.net 2001-