Как создать простой скрипт, чтобы убить 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 

    One Solution collect form web for “Как создать простой скрипт, чтобы убить uhttpd, а затем запустить lighttpd?”

    Я не стал бы ждать 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 достаточно времени, чтобы перезапустить его (например, посмотрите на uhttpd процесса uhttpd перед запуском своего скрипта и после него).

    Linux и Unix - лучшая ОС в мире.