¿Cómo creo un script simple para eliminar uhttpd y luego iniciar lighttpd?

¿Cómo creo un script simple para eliminar uhttpd y luego iniciar lighttpd?

Tengo un enrutador ejecutándose uhttpdde forma predeterminada y hay un proceso que lighttpdme gustaría ejecutar en su lugar. Dado que ambos procesos comparten el mismo puerto, me gustaría finalizar uhttpdy luego iniciar lighttpdautomáticamente (configurando el script que contiene los comandos como un crontrabajo que se ejecuta al reiniciar).

Cuando ejecuto los comandos que me gustaría ingresar al script individualmente, funcionan. Cuando los pongo en un script, aparece un mensaje de error que me indica que el número de puerto está en uso. Los comandos son:

killall uhttpd

/etc/init.d/lighttpd start

El script simple que tengo hasta ahora es:

#!/bin/sh
killall uhttpd
sleep 5 #To give the device time to release the port
/etc/init.d/lighttpd start

Respuesta1

No esperaría 5 segundos y espero que funcione, es posible que espere demasiado o demasiado poco. Puede utilizar nc -zpara probar si el puerto (todavía) se está utilizando y hacer lo siguiente (supongo que están "peleando" por el puerto 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

Si después de esperar 5 veces el proceso aún no finaliza, extráigalo con más fuerza y ​​solo inicie lighttpd si el puerto está libre.

Deberías investigar si algo está reiniciando uhttpd (por ejemplo, el proceso que lo inicia en primer lugar). Tal vez el sleep 5que está utilizando deje suficiente tiempo para reiniciarse (por ejemplo, mire el uhttpdnúmero de proceso antes de ejecutar el script y después).

información relacionada