Como faço para criar um script simples para matar o uhttpd e depois iniciar o lighttpd?

Como faço para criar um script simples para matar o uhttpd e depois iniciar o lighttpd?

Eu tenho um roteador em execução uhttpdpor padrão e há um processo que lighttpdgostaria de executar. Como ambos os processos compartilham a mesma porta, eu gostaria de encerrar uhttpde iniciar lighttpdautomaticamente (configurando o script que contém os comandos como um crontrabalho executado na reinicialização).

Quando executo os comandos que gostaria de entrar no script individualmente, eles funcionam. Quando os coloco em um script, recebo uma mensagem de erro informando 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

Responder1

Eu não esperaria 5 segundos e espero que funcione, você pode esperar muito ou muito pouco. Você pode usar nc -zpara testar se a porta (ainda) está sendo usada e fazer o seguinte (presumo que eles estejam "brigando" pela 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 depois de esperar 5 vezes o processo ainda não for encerrado, expulse-o 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). Talvez o que sleep 5você está usando deixe tempo suficiente para reiniciar (por exemplo, observe o uhttpdnúmero do processo antes e depois de executar o script).

informação relacionada