Como eu crio um script simples para matar o uhttpd e depois iniciar o lighttpd?

0

Eu tenho um roteador executando uhttpd por padrão e há um processo usando lighttpd gostaria de executar em vez disso. Como os dois processos compartilham a mesma porta, eu gostaria de matar uhttpd e depois iniciar lighttpd automaticamente (configurando o script que contém os comandos como um trabalho cron que é executado na reinicialização).

Quando executo os comandos, gostaria de entrar no script individualmente, eles funcionam. Quando eu os coloco em um script, recebo uma mensagem de erro dizendo que o número da porta está em uso. Os comandos são:

killall uhttpd

/etc/init.d/lighttpd start

O script simples que tenho até agora é:

#!/bin/sh
killall uhttpd
sleep 5 #To give the device time to release the port
/etc/init.d/lighttpd start
    
por marundu 16.02.2016 / 08:13

1 resposta

2

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).

    
por 16.02.2016 / 08:43