Linux는 rcX.d 디렉토리에서 어떤 기능을 선택할지 어떻게 알 수 있습니까?

Linux는 rcX.d 디렉토리에서 어떤 기능을 선택할지 어떻게 알 수 있습니까?

예를 들어 다음 스크립트가 있습니다.

...
start(){
  echo "Starting..."   
  su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"       
  su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"
  touch /var/lock/subsys/dbora 
}

stop(){
  echo "Stopping..."
  su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole"
  su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
  rm -f /var/lock/subsys/dbora
}

restart(){
  stop
  start
}

usage(){
  echo "usage: $0 {start|stop|restart}"
}
...

이 스크립트를 /etc/init.d 디렉토리에 넣고 S(start)로 시작하는 파일 이름으로 rc3.d에 링크를 만든 후 Linux는 function 을 사용하는 데 필요한지 어떻게 알 수 있습니까 start()?

답변1

이 스크립트를 디렉토리에 넣고 (start) 로 시작하는 파일 이름으로 /etc/init.d링크를 만든 후 Linux는 function을 사용하는 데 필요한지 어떻게 알 수 있습니까 ?rc3.dSstart()

나는 그렇게 생각하지 않습니다. 함수는 스크립트 내부에 있으며 스크립트는 함수 자체를 호출해야 합니다.

해당 초기화 스크립트를 둘러싼 다른 스캐폴딩은 수행할 작업을 알려주는 인수를 사용하여 start호출 stop합니다 restart. 링크( K*S*)의 이름은 스크립트를 실행하는 순서와 시작 또는 중지를 지시해야 하는지를 알려줍니다. 물론 systemd는 작업을 약간 다르게 수행하지만 올바르게 이해하면 여전히 그런 init 스크립트를 지원할 수 있으므로 실행할 때 올바른 인수를 전달해야 합니다.

그러면 init 스크립트에서 다음과 같은 내용을 볼 수 있습니다.

do_start() {
    something here...
}
do_stop() {
    something else here...
}

case $1 in
    start)
        do_start;;
    stop)
        do_stop;;
    restart)
        do_stop;
        do_start;;
    *)
        usage;;
esac

하단 case에서는 첫 번째 인수가 무엇인지 확인하고 이를 기반으로 작동합니다. 그것이 당신의 스니펫에서 누락된 부분입니다.

새로운 init 스크립트를 작성하는 경우 대신 시스템 서비스로 구현하는 것을 고려해야 합니다.

답변2

(리눅스)는 그렇지 않습니다. 리눅스는 커널이다. Gnu/Linux 운영 체제는 알고 있습니다.

특히 init프로세스는 알고 있습니다. 스크립트에는 , , init가 있어야 합니다 . 이러한 메서드에는 미리 정의된 의미가 있으며 적절한 시점에 호출됩니다. 이러한 메소드는 스크립트에 대한 인터페이스이므로 구현해야 합니다.startstoprestart

답변3

"S" 때문에 링크를 시작했습니다. 링크가 "K"(kill에서 유래)로 시작하면 중지 기능이 실행됩니다.

관련 정보