![uhttpd를 종료하고 lighttpd를 시작하는 간단한 스크립트를 어떻게 만들 수 있습니까?](https://linux55.com/image/83605/uhttpd%EB%A5%BC%20%EC%A2%85%EB%A3%8C%ED%95%98%EA%B3%A0%20lighttpd%EB%A5%BC%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%EA%B0%84%EB%8B%A8%ED%95%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%A7%8C%EB%93%A4%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
기본적으로 실행되는 라우터 와 "실행하고 싶습니다"를 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