Acabei de encontrar uma solução alternativa usando um script de pré-inicialização do upstart:
pre-start script
while [ -z "$(ifconfig | grep wlan)" ]
do
sleep 1
done
sleep 5
end script
Eu tenho um pacote debian que estou executando na inicialização.
Estou usando o upstart e acho que preciso adicionar uma dependência à configuração do upstart:
start on someProgram
Não sei qual programa, mas não estou usando network-manager
, está desativado. Eu estou fazendo algo assim:
ethernet=$(ifconfig -a | grep Ethernet | grep ^e | cut -d' ' -f1)
wifi=$(ifconfig -a | grep wl | cut -d' ' -f1)
ping -I $ethernet -c 1 8.8.8.8 \
|| ping -I $wifi -c 1 8.8.8.8 \
|| echo "not online"
O problema é ifconfig
nem sempre mostra a interface $wifi
porque o programa foi ativado muito cedo no processo de inicialização.
Também ping -I $ethernet -c 1 8.8.8.8
falha quando deve ser bem sucedido.
Se eu faço sleep 30
then ping
funciona bem.
Alguém sabe o pacote que eu deveria estar esperando para que isso funcione como esperado?
Estou usando o Ubuntu 14.04 em um dispositivo incorporado.
3.0.36+ #16 SMP PREEMPT Tue Oct 31 19:17:57 EDT 2017 armv7l armv7l armv7l GNU/Linux
Eu achei que tinha uma resposta:
I'm finding that the network interfaces can be referenced directly instead of a package:
start on (local-filesystems and net-device-up IFACE!=lo)
I'd still like to improve it slightly for my case.
Since I'd rather wait for wlan than eth but I'm not sure if I can use a wild card like:
IFACE=wlan*
Mas parece que isso não espera que a interface esteja disponível para ifconfig
, mas espera que essa interface tenha uma conexão ativa com a Internet.
Tags networking upstart debian