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.d
y luego creo un enlacerc3.d
con un nombre de archivo que comienza conS
(inicio), ¿cómo sabe Linux que es necesario usar la funciónstart()
?
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
, stop
o restart
algo 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 case
la 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 init
proceso lo sabe. init
Los 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.