Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] Ошибка вызова route в скрипте, запущенном через crontab

Ответить
Настройки темы
[решено] Ошибка вызова route в скрипте, запущенном через crontab

ИО Капитана Очевидности


Contributor


Сообщения: 5383
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Добрый день.
Написал скрипт на 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)

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

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Отправлено: 08:09, 19-12-2011

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4462
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


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

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:22, 19-12-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


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

Отправлено: 09:11, 19-12-2011 | #3


Забанен


Сообщения: 6158
Благодарности: 1300

Профиль | Цитировать


Цитата 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:20, 19-12-2011 | #4


ИО Капитана Очевидности


Contributor


Сообщения: 5383
Благодарности: 1105

Профиль | Отправить PM | Цитировать


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

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

Всё работает

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Отправлено: 09:23, 19-12-2011 | #5



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] Ошибка вызова route в скрипте, запущенном через crontab

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Перезагрузка в WPI (ошибка в скрипте?) denkosa Автоматическая установка приложений 1 16-11-2011 21:00
VBS/WSH/JS - [решено] Ошибка в скрипте Loran_rus Скриптовые языки администрирования Windows 3 26-08-2011 11:15
VBS/WSH/JS - ошибка в скрипте D_e_n_n Скриптовые языки администрирования Windows 3 12-08-2011 14:03
[решено] Ошибка вызова preg_match в РНР dmitryst Вебмастеру 8 17-09-2008 15:41
Ошибка в скрипте поиска shurovik О сайте и форуме 2 02-09-2004 13:05




 
Переход