Как уменьшить время ожидания на ifup?

Я пишу сценарий оболочки, который вызывает интерфейс Ethernet (настроенный для DHCP), чтобы определить, подключен ли он к сети. Если это не так, я бы хотел своевременно (в течение нескольких секунд) сообщить, что соединения нет. К сожалению, при отсутствии соединения ifup, похоже, подождет несколько минут, прежде чем истечет время ожидания, и на странице man не будет указан параметр timeout. Есть ли способ остановить его через несколько секунд?

Это на Ubuntu Server 11.10; NetworkManager не используется.

2
задан 29 December 2011 в 01:08

2 ответа

Вы не сказали, что вы используете для уведомления.

[[ -n "$(ifconfig | grep '192.*' )" ]] || echo "down"

Измените «192» на префикс вашей сети (192.168.x.y является наиболее распространенным).

Измените "echo" down "" на ваше уведомление.

Запустите эту команду из cron с некоторым разумным интервалом.

Возможно, что-то вроде

[[ -n "$(ifconfig | grep '192.*' )" ]] || dhclient eth0

выполняется раз в минуту или около того?

0
ответ дан 29 December 2011 в 01:08

Я наконец нашел способ.

Как выясняется, поскольку я действительно хочу проверить ссылку, мне вообще не нужен ifup. Вместо этого я могу использовать ethtool (хотя он должен быть установлен первым), например так:

connected=$(ethtool eth0 | awk '/Link detected:/ { print $3 }')

Если, однако, мне нужно было проверить ifup, я мог бы использовать фоновый процесс и переменная оболочки $!. Если бы я просто хотел проверить, работает ли он после истечения времени ожидания, я мог бы сделать это:

ifup eth0 &
sleep 5
if ps -p $! | grep -q "$!"; then
    connected='no'
    kill $!
else
    connected='yes'
fi

Если бы я хотел получить выходные данные из ifup, лучше всего было бы перенаправить его во временный файл. (Я посмотрел на именованные каналы, но я не думаю, что они будут работать для этой цели; ifup будет блокироваться, пока другой процесс не будет читать свои выходные данные.)

0
ответ дан 29 December 2011 в 01:08

Другие вопросы по тегам:

Похожие вопросы: