¿Cómo sabe Linux qué función elegir en el directorio rcX.d?

¿Cómo sabe Linux qué función elegir en el directorio rcX.d?

Por ejemplo, tengo el siguiente 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}"
}
...

Si coloco este script en el directorio /etc/init.d y luego creo un enlace en rc3.d con un nombre de archivo que comienza con S(inicio), ¿cómo sabe Linux que es necesario usar la función start()?

Respuesta1

Si pongo este script en el directorio /etc/init.dy luego creo un enlace rc3.dcon un nombre de archivo que comienza con S(inicio), ¿cómo sabe Linux que es necesario usar la función start()?

No creo que así sea. La función es interna de su script y el script debe llamarla a sí mismo.

El otro andamio que rodea ese script de inicio llama con un argumento que indica qué hacer, start, stopo restartalgo así. Los nombres de los enlaces ( K*y S*) indican en qué orden ejecutar el script y si se les debe indicar que inicien o detengan. Por supuesto, systemd hace las cosas un poco diferentes, pero si lo entiendo correctamente, aún puede admitir scripts de inicio como ese, por lo que debe pasarles el argumento correcto al ejecutarlos.

Entonces ves cosas como esta en los scripts de inicio:

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

En casela parte inferior comprueba cuál es el primer argumento y trabaja en base a él; esa es la parte que falta en tu fragmento.

Si está escribiendo un nuevo script de inicio, debería considerar implementarlo como un servicio systemd.

Respuesta2

Él (Linux) no lo hace. Linux es un núcleo. El sistema operativo Gnu/Linux lo sabe.

En particular el initproceso lo sabe. initLos scripts deben tener start, stop, restart. Estos métodos tienen significados predefinidos y se llaman en el momento adecuado. Estos métodos son la interfaz de su script, debe implementarlos.

Respuesta3

Por la "S" con la que iniciaste el enlace. Cuando un enlace comienza con "K" (de matar), ejecutará la función de parada.

información relacionada