예를 들어 다음 스크립트가 있습니다.
...
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.d
S
start()
나는 그렇게 생각하지 않습니다. 이 함수는 스크립트 내부에 있으며 스크립트 자체에서 호출해야 합니다.
해당 초기화 스크립트 주변의 또 다른 스캐폴드 는 수행할 작업을 알려주는 매개변수, , 등을 사용하여 호출 start
됩니다 . 링크 이름( 및 )은 스크립트가 실행되는 순서와 시작 또는 중지를 지시해야 하는지 여부를 알려줍니다. 물론 systemd는 이를 약간 다르게 수행하지만 제가 올바르게 이해했다면 여전히 이와 같은 init 스크립트를 지원할 수 있으므로 실행할 때 올바른 인수를 전달해야 합니다.stop
restart
K*
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에서)로 시작하면 중지 기능이 실행됩니다.