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는 이 기능을 사용해야 한다는 것을 어떻게 알 수 있습니까 start()?

답변1

이 스크립트를 디렉토리에 넣고 /etc/init.d(start)로 시작하는 파일 이름으로 링크를 생성한 후 Linux는 해당 기능을 사용해야 한다는 것을 어떻게 알 수 있습니까?rc3.dSstart()

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

해당 초기화 스크립트 주변의 또 다른 스캐폴드 는 수행할 작업을 알려주는 매개변수, , 등을 사용하여 호출 start됩니다 . 링크 이름( 및 )은 스크립트가 실행되는 순서와 시작 또는 중지를 지시해야 하는지 여부를 알려줍니다. 물론 systemd는 이를 약간 다르게 수행하지만 제가 올바르게 이해했다면 여전히 이와 같은 init 스크립트를 지원할 수 있으므로 실행할 때 올바른 인수를 전달해야 합니다.stoprestartK*S*

그러면 초기화 스크립트에 다음과 같은 내용이 표시됩니다.

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스크립트에는 start, stop, 가 있어야 합니다 restart. 이러한 메서드에는 미리 정의된 의미가 있으며 적절한 시점에 호출됩니다. 이러한 메소드는 스크립트의 인터페이스이므로 구현해야 합니다.

답변3

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

관련 정보