Eu não esperaria por 5 segundos e espero que funcione, você pode esperar muito ou muito pouco. Você pode usar nc -z
para testar se a porta está (ainda) sendo usada e fazer o seguinte (eu suponho que eles estão "lutando" com a porta 80):
#!/bin/bash
for i in $(seq 5); do
if ! nc -z localhost 80; then
break
fi
echo $i
sleep 1
done
if nc -z localhost 80; then
killall -9 uhttpd
sleep 1
fi
if ! nc -z localhost 80; then
/etc/init.d/lighttpd start
else
echo 'port not free'
fi
Se após 5 tentativas de espera o processo ainda não estiver morto, expulse com mais força e só inicie o lighttpd se a porta estiver livre.
Você deve investigar se algo está reiniciando o uhttpd (por exemplo, o processo que o inicia em primeiro lugar). Talvez o sleep 5
que você está usando deixe tempo suficiente para ser reiniciado (por exemplo, observe o número do processo uhttpd
antes de executar o script e depois).