init 스크립트에서 /sbin/init를 호출할 수 있나요?

init 스크립트에서 /sbin/init를 호출할 수 있나요?

다음과 같은 사용자 정의 초기화가 있다고 가정해 보겠습니다.

#!/bin/bash
sleep infinity

다음 중 init를 로드하는 것은 무엇입니까?

  1. #!/bin/bash
    /sbin/init
    sleep infinity
    
  2. #!/bin/bash
    exec /sbin/init
    sleep infinity
    

exec가 새 쉘을 시작해야 한다는 것을 알고 있지만, 꼭 필요한가요?

답변1

  1. init스크립트에서 호출하는 것은 실제로 매우 정상적입니다. 일반적인 부트로더 스크립트는 루트 디스크를 적절하게 마운트한 다음 init를 실행합니다.

  2. initinit가 아닌 init로 호출하려면 telinitPID 1로 실행되어야 합니다. 따라서 가 필요합니다 exec. 따라서 init 실행에는 (2) 스크립트만 유용할 수 있습니다.

  3. 이후에는 exec스크립트가 더 이상 실행되지 않습니다. 따라서 sleep infinity실행되지 않습니다. exec 이전에 실행되는 모든 것이 유용합니다.

  4. 단지 다른 것을 실행하고 싶다면 에 적절하게 나열하거나 /etc/inittab거기에서 스크립트를 호출할 수도 있습니다(보통 에 배치되고 /etc/init.d심볼릭 링크됨)./etc/rc#.d).

관련 정보