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

관련 정보