Как создать простой скрипт для завершения uhttpd и последующего запуска lighttpd?

Как создать простой скрипт для завершения uhttpd и последующего запуска lighttpd?

У меня есть маршрутизатор, работающий uhttpdпо умолчанию, и есть процесс, который lighttpdя хотел бы запустить вместо него. Поскольку оба процесса используют один и тот же порт, я хотел бы автоматически завершить uhttpdи запустить его lighttpd(настроив скрипт, содержащий команды, как cronзадание, которое запускается при перезагрузке).

Когда я запускаю команды, которые я хотел бы ввести в скрипт по отдельности, они работают. Когда я помещаю их в скрипт, я получаю сообщение об ошибке, сообщающее мне, что номер порта используется. Команды следующие:

killall uhttpd

/etc/init.d/lighttpd start

Вот простой сценарий, который у меня есть на данный момент:

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

решение1

Я бы не стал ждать 5 секунд и надеяться, что это сработает, вы можете ждать слишком долго или слишком мало. Вы можете использовать nc -zдля проверки, используется ли порт (еще) и сделать следующее (я предполагаю, что они «борются» за порт 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

Если после 5-кратного ожидания процесс все еще не завершен, завершите его с большей силой и запускайте lighttpd только при свободном порте.

Вам следует проверить, не перезапускает ли что-то uhttpd (например, процесс, который запускает его в первую очередь). Возможно, sleep 5используемый вами процесс оставляет достаточно времени для перезапуска (например, посмотрите на uhttpdномер процесса до запуска скрипта и после).

Связанный контент