Como diminuo o tempo limite no ifup?

1

Estou escrevendo um script de shell que traz uma interface Ethernet (configurada para DHCP) para determinar se ele está conectado a uma rede. Se não estiver, gostaria de poder informar em tempo hábil (em alguns segundos) que não há conexão. Infelizmente, na ausência de uma conexão, o ifup parece esperar alguns minutos antes do tempo limite, e a página man não menciona um parâmetro de timeout. Existe alguma maneira de pará-lo depois de alguns segundos?

Isso está no Ubuntu Server 11.10; O NetworkManager não está em uso.

    
por Taymon 28.12.2011 / 22:08

2 respostas

0

Eu finalmente encontrei um jeito.

Como se vê, já que o que eu realmente quero fazer é verificar o link, não preciso de ifup . Em vez disso, posso usar ethtool (embora tenha que ser instalado primeiro), assim:

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

Se, no entanto, eu precisasse verificar ifup , eu poderia usar um processo em segundo plano e a variável $! shell. Se eu quisesse verificar se ainda estava em execução após o tempo limite, poderia fazer isso:

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

Se eu quisesse capturar a saída de ifup , minha melhor aposta seria redirecionar para um arquivo temporário. (Eu olhei em pipes nomeados, mas eu não acho que eles funcionariam para esse propósito; ifup iria bloquear até que outro processo estivesse lendo sua saída).

    
por Taymon 06.01.2012 / 07:55
0

Você não disse o que está usando para uma notificação.

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

Altere "192" para o prefixo da sua rede (192.168.x.y é mais comum).

Altere "echo" para baixo "" para sua notificação.

Execute o comando do cron com algum intervalo razoável.

Talvez algo nos moldes de

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

executar uma vez por minuto ou mais?

    
por Panther 28.12.2011 / 22:55