 |
» |
|
|
 |
Esta sección explica cómo hacer que las aplicaciones y los servicios arranquen automáticamente en el inicio y se detengan en el cierre. Para automatizar el inicio y el cierre de un subsistema, es preciso dar todos los pasos siguientes: Decida a qué niveles de ejecución desea que el subsistema se inicie y detenga. Normalmente, los subsistemas se detienen en un nivel de ejecución inferior al que se iniciaron, de modo que un subsistema iniciado en un nivel de ejecución 3 se detendrá en un nivel de ejecución 2. Probablemente desee iniciar el subsistema en un nivel de ejecución 1, 2 o 3. En general, estos niveles de ejecución desempeñan las siguientes funciones: - Nivel de ejecución 1:
configuración mínima del sistema - Nivel de ejecución 2:
servicios multiusuario, excepto el servidor NFS - Nivel de ejecución 3:
el servidor NFS (para compartir sistemas de archivos locales)
Para ver exactamente qué se inicia en el sistema en cada nivel de ejecución, examine /sbin/rcn.d/S*, donde n es el nivel de ejecución. A menos que el subsistema dependa de los servicios de exportación de NFS, como rpc.mountd y nfsd, el nivel de ejecución 2 es un buen lugar para iniciarlo. El nivel de ejecución 2 es una opción segura, así como lógica, en general, porque tiene un marcador de posición con la garantía de HP de que no se sobrescribirá con las revisiones futuras de HP ni con el software de otros fabricantes; no existe un marcador de posición así, ni por tanto ninguna garantía semejante, en los demás niveles de ejecución. Elabore una secuencia de comandos para iniciar y detener el subsistema, y una secuencia de comandos de configuración complementaria para indicarle al proceso de inicio si debe ejecutar esta secuencia de comandos o no. Utilice la plantilla /sbin/init.d/template; consulte el ejemplo presentado más adelante. Cree enlaces simbólicos que hagan que la secuencia de comandos se ejecute en el lugar correcto de las secuencias de inicio y cierre. Consulte el siguiente ejemplo. Reinicie el sistema para asegurarse de que todo funciona. En un sistema con mucho ajetreo, esto puede ser molesto, pero ojo con realizar las pruebas en una configuración que no sea la configuración en la que realmente se vaya a ejecutar el subsistema: cualquier diferencia que exista en la configuración de inicio/cierre entre el sistema de prueba y el sistema de producción puede anular la prueba.
Ejemplo:En este ejemplo, se muestra una forma de automatizar el inicio de un demonio de servidor llamado web_productname_daemon: Decida qué nivel de ejecución desea: Esto es lo que se inicia en el nivel de ejecución 2: ls /sbin/rc2.d/S*
/sbin/rc2.d/S008net.sd
/sbin/rc2.d/S560SnmpMaster
/sbin/rc2.d/S100swagentd
/sbin/rc2.d/S565SnmpHpunix... |
Esto es lo que se inicia en el nivel de ejecución 3: ls /sbin/rc3.d/S*
/sbin/rc3.d/S100nfs.server |
/sbin/rc3.d/S100nfs.server es un enlace con /sbin/init.d/nfs.server, que inicia portmap, rpc.mountd, nfsd y las funciones relacionadas. Puesto que el demonio web_productname no necesita ninguno de los comandos anteriores, no entraña riesgo iniciarlo en el nivel de ejecución 2, utilizando el número de marcador de posición 900 (consulte más adelante). De un modo parecido, se detiene la secuencia de comandos en el nivel de ejecución 1, utilizando el número de marcador de posición 100.
Elabore las secuencias de comandos de inicio/cierre y configuración. Puede utilizar como base /sbin/init.d/template y crear la siguiente secuencia de inicio/cierre y guardarla como /sbin/init.d/web_productname:  |
#!/sbin/sh
PATH=/usr/sbin:/usr/bin:/sbin
export PATH
web_productname_daemon="web_productname"
rval=0
killproc()
{
pid=`ps -e | awk '$NF~/'"$1"'/ {print $1}'`
if [ "X$pid" != "X" ]
then
if kill "$pid"
then
echo "$1 stopped"
else
rval=1
echo "Unable to stop $1"
fi
fi
}
case $1 in
'start_msg')
# message that appears in the startup checklist
echo "Starting the web_productname daemon"
;;
'stop_msg')
# message that appears in the shutdown checklist
echo "Stopping the web_productname daemon"
;;
'start')
# source the configuration file
if [ -f /etc/rc.config.d/web_productname]
then
. /etc/rc.config.d/web_productname
else
echo "ERROR: /etc/rc.config.d/web_productname MISSING"
fi
# Check to see if the web_productname daemon exists,
# is executable and should be started
if [ "$WEB_PRODUCTNAME" -eq 1 -a -x
"$WEB_PRODUCTNAMEHOME/$web_productname_daemon" ]
then
cd $WEB_PRODUCTNAMEHOME
./$web_productname_daemon
print "$web_productname_daemon started"
else
print "failed to start $web_productname_daemon"
rval=2
fi
;;
'stop')
killproc $web_productname_daemon
;;
*)
echo "usage: $0 {start|stop|start_msg|stop_msg}"
rval=1
;;
esac
exit $rval |
 |
A continuación, cree un archivo de configuración, /etc/rc.config.d/web_productname, para indicarle a la secuencia de comandos anterior dónde buscar el demonio web_productname y si debe iniciarlo o no (1=sí; 0=no): #!/sbin/sh#
# v1.0 web_productname startup/kill config
# WEB_PRODUCTNAME: Set to 1 to start
# web_productname_daemon
# WEB_PRODUCTNAMEHOME: home dir for web_productname
WEB_PRODUCTNAME=1
WEB_PRODUCTNAMEHOME=/sample/web_productname/binhp |
 |  |  |  |  | NOTA: Configurar la variable de inicio (en este caso, WEB_PRODUCTNAME) en 0, en lugar de borrar la secuencia de comandos, es la forma de eliminar un subsistema de la secuencia de inicio. Esto reviste especial importancia en el caso de las secuencias de comandos de HP y de otros fabricantes: no las modifique, borre ni traslade; simplemente, cambie la variable de la secuencia de comandos apropiada debajo de /etc/rc.config.d/ a 0, si no desea que la secuencia de comandos de inicio correspondiente se ejecute. |  |  |  |  |
Cree enlaces simbólicos que hagan que la secuencia de comandos se ejecute en el lugar correcto de las secuencias de inicio y cierre. Puesto que HP garantiza que las secuencias de comandos que utilizan el número 900 en el nivel de ejecución 2 no se sobrescriben al realizar una mejora del sistema o al agregar software de HP o de otros fabricantes, y ya que el nivel de ejecución 2 es un lugar adecuado para iniciar el demonio web_productname, se ha asignado el número de secuencia de comandos 900 y éste se ha enlazado con el directorio /sbin/rc2.d: ln -s /sbin/init.d/web_productname /sbin/rc2.d/S900web_productname |
La S indica inicio en inglés («start») y el número 900 determina el orden de inicio en el nivel de ejecución, por lo que la secuencia de comandos correspondiente se inicia tarde (actualmente la última) en el nivel de ejecución 2. De un modo parecido, HP garantiza que no se sobrescribirán las secuencias de comandos que utilicen el número 100 en el nivel de ejecución 1, por lo que también se ha asignado a la secuencia de comandos el número 100 y éste se ha enlazado con el directorio /sbin/rc1.d, esta vez con la letra de código K (de «kill», terminar): ln -s /sbin/init.d/web_productname /sbin/rc1.d/K100web_productname |
Esto significa que el demonio web_productname se detiene después de la mayoría de las funciones en el nivel de ejecución 1 mientras el sistema se cierra. Pruebe la secuencia de comandos y compruebe que funciona correctamente en los procesos de inicio y cierre. Ejecute /sbin/init.d/web_productname varias veces «de forma manual» para depurarlo y, a continuación, instálelo (tal como se describe en el paso 3 anterior) en un sistema de prueba que haya reiniciado para probar que el demonio se iniciaba y detenía correctamente y, por último, instálelo en el sistema de producción y reinicie dicho sistema.
|