기본적으로 실행되는 라우터 와 "실행하고 싶습니다"를 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