/etc/rc.local의 while(1)

/etc/rc.local의 while(1)

나는 오목한 판에 글을 썼다 while true; do ping 10.9.0.1; sleep 1; done. /etc/rc.local20분 넘게 기다려도 여전히 로그인 메시지를 받지 못했습니다. 시작 시 멈추거나 부팅 속도가 매우 느립니다(보통 내 장치에서 로그인 프롬프트를 받는 데 2분 미만이 소요됩니다).

SD 카드를 노트북에 넣고 삭제하면 되더라구요 while(1). 그런데 PC/노트북에서 이런 짓을 하면, 배포판을 다시 설치하지 않고도 고칠 수 있지 않을까 하는 생각이 들었습니다.

답변1

첫째, 작성된 대로 호스트를 찾을 수 없는 한 영원히 실행됩니다. 중지하라는 신호를 ping잡을 때까지(즉) 계속 실행되기 때문입니다 .SIGINT

/etc/rc.local내가 기억하는 한, 의 스크립트는 백그라운드에서 실행되지 않습니다. 따라서 무한 루프이기 때문에 스크립트가 완료되지 않습니다. 이를 수행하는 구체적인 이유에 따라 배경으로 설정하거나 조건이 충족되면 종료되도록 변경할 수 있습니다.

네트워크가 연결될 때까지 지연하기 위해 이 작업을 수행하는 경우 다음을 수행할 수 있습니다.

while ! ping -c1 10.9.0.1; do
   sleep 1
done

또는 백그라운드에서 초당 1회 ping을 실행하려는 경우 screen또는 를 사용하여 셸에서 프로세스를 분리하고 시작이 진행되도록 허용할 nohup수 있습니다.disown

어느 쪽이든 문제가 발생하는 경우 시작 시 스크립트를 중지할 수 있는 방법이 없기 때문에 이는 잠재적으로 위험한 일입니다.

/etc/init.d/작업이 너무 오래 걸릴 경우 중단하기에 충분한 논리가 있는 선택한 런레벨과 연결된 스크립트를 사용하는 것이 더 나을 수도 있습니다.

관련 정보