uhttpd를 종료하고 lighttpd를 시작하는 간단한 스크립트를 어떻게 만들 수 있습니까?

uhttpd를 종료하고 lighttpd를 시작하는 간단한 스크립트를 어떻게 만들 수 있습니까?

기본적으로 실행되는 라우터 와 "실행하고 싶습니다"를 uhttpd사용하는 프로세스가 있습니다. 두 프로세스 모두 동일한 포트를 공유하므로 명령을 포함하는 스크립트를 재부팅 시 실행되는 작업 으로 설정하여 종료 한 다음 자동으로 시작하고 lighttpd싶습니다 .uhttpdlighttpdcron

스크립트에 개별적으로 들어가려는 명령을 실행하면 작동합니다. 이를 스크립트에 넣으면 포트 번호가 사용 중이라는 오류 메시지가 나타납니다. 명령은 다음과 같습니다:

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

관련 정보