Como o Linux sabe qual função escolher no diretório rcX.d?

Como o Linux sabe qual função escolher no diretório rcX.d?

Por exemplo, tenho o seguinte script:

...
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}"
}
...

Se eu colocar este script no diretório /etc/init.d e depois criar um link em rc3.d com o nome do arquivo começando com S(iniciar), como o Linux sabe que é necessário usar a função start()?

Responder1

Se eu colocar este script no diretório /etc/init.de depois criar um link rc3.dcom o nome do arquivo começando com S(iniciar), como o Linux sabe que é necessário usar a função start()?

Eu não acho que isso acontecerá. A função é interna ao seu script e o script deve chamá-la sozinho.

O outro andaime que envolve esse script de inicialização chama com um argumento que diz o que fazer, start, stopou restartalgo assim. Os nomes dos links ( K*e S*) informam em que ordem o script deve ser executado e se eles devem ser informados para iniciar ou parar. É claro que o systemd faz as coisas de maneira um pouco diferente, mas se bem entendi, ele ainda pode suportar scripts de inicialização como esse e, portanto, precisa passar a eles o argumento correto ao executá-los.

Então você vê coisas assim nos scripts de inicialização:

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

O casena parte inferior verifica qual é o primeiro argumento e funciona com base nisso; essa é a parte que falta no seu snippet.

Se você estiver escrevendo um novo script de inicialização, considere implementá-lo como um serviço systemd.

Responder2

Ele (Linux) não. Linux é um kernel. O sistema operacional Gnu/Linux sabe.

Em particular, o initprocesso sabe. initos scripts precisam ter start, stop, restart. Esses métodos possuem significados predefinidos e são chamados no momento apropriado. Esses métodos são a interface do seu script, você deve implementá-los.

Responder3

Por causa do "S" com o qual você iniciou o link. Quando um link começa com "K" (de kill), ele executa a função stop.

informação relacionada