Scripts de inicio INIT para openSUSE
En un artículo anterior que trataba sobre Iperf en openSUSE había mencionado que si queremos que esta herramienta automáticamente se ejecute como un servicio y demonio cada vez que inicie el sistema operativo necesitamos crear un script de arranque.
Pues bien, en este artículo justamente se va a tratar la creación de ese script de arranque para openSUSE utilizando como ejemplo a la herramienta Iperf.
Si bien la mayoría de las distribuciones Linux están migrando paulatinamente a Upstart como demonio Init (como también lo ha anunciado openSUSE), los scripts de arranque seguirán manteniendo su formato y estructura durante buen tiempo, principalmente por cuestiones de compatibilidad.
Para crear un script de inicio para el servicio Iperf podemos seguir los siguientes pasos:
Pues bien, en este artículo justamente se va a tratar la creación de ese script de arranque para openSUSE utilizando como ejemplo a la herramienta Iperf.
Si bien la mayoría de las distribuciones Linux están migrando paulatinamente a Upstart como demonio Init (como también lo ha anunciado openSUSE), los scripts de arranque seguirán manteniendo su formato y estructura durante buen tiempo, principalmente por cuestiones de compatibilidad.
Para crear un script de inicio para el servicio Iperf podemos seguir los siguientes pasos:
- Nos conectamos con el usuario root, creamos un archivo llamado iperfd en el directorio /etc/init.d y le asignamos los permisos de ejecución adecuados:
testsrv:~ # touch /etc/init.d/iperfd
testsrv:~ # chmod 755 /etc/init.d/iperfd - Editamos el archivo iperfd creado en el paso anterior,
testsrv:~ # vi /etc/init.d/iperfd
y le agregamos el siguiente texto:#!/bin/sh
Enlace: Script en Github Gist.
# Author: Gabriel K
#
# /etc/init.d/iperfd
#
### BEGIN INIT INFO
# Provides: iperf
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Iperf
# Description: Tool To Measure Network Performance.
### END INIT INFO
PROGRAM=/usr/bin/iperf
. /etc/rc.status
# The echo return value for success (defined in /etc/rc.config).
return=$rc_done
case "$1" in
start )
echo -n "Starting service iperfd "
##
## Start daemon with startproc(8). If this fails
## the echo return value is set appropriate.
startproc -q $PROGRAM -s -D
rc_status -v
;;
stop )
echo -n "Shutting down service iperfd "
## Stop daemon with killproc(8) and if this fails
## set echo the echo return value.
killproc -g $PROGRAM
rc_status -v
;;
try-restart )
$0 status
if test $? = 0; then
$0 restart
else
rc_reset
fi
rc_status
;;
restart )
$0 stop
$0 start
rc_status
;;
status )
echo -n "Checking for service iperfd: "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.
checkproc $PROGRAM
rc_status -v
;;
* )
echo "Usage: $0 {start|stop|restart|reload|force-reload|status|try-restart}"
exit 1
;;
esac
rc_exitAlgunas observaciones con respecto al script anterior:
- Todo lo resaltado son opciones que fueron agregadas y personalizadas, y son específicas para la ejecución de iperf.
- El parámetro -g del comando killproc es fundamental para el caso en que el servicio a detener cuente con varios procesos hijos.
- La sección comentada al inicio del script es muy importante porque contiene información fundamental como la definición de los niveles de ejecución, las dependencias para la ejecución de la aplicación, etc.
- Todo lo resaltado son opciones que fueron agregadas y personalizadas, y son específicas para la ejecución de iperf.
- Con lo hecho hasta el momento ya podemos arrancar, parar, reiniciar, ver el estado de ejecución del servicio, etc. de forma manual mediante la ejecución de los siguientes comandos:
testsrv:~ # service iperfd start
testsrv:~ # service iperfd restart
testsrv:~ # service iperfd status
redirecting to systemctl
iperfd.service - LSB: Iperf
Loaded: loaded (/etc/init.d/iperfd)
Active: active (running) since Tue, 12 Jun 2012 19:54:18 -0400; 16s ago
Process: 4471 ExecStop=/etc/init.d/iperfd stop (code=exited, status=0/SUCCESS)
Process: 4482 ExecStart=/etc/init.d/iperfd start (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/iperfd.service
└ 4494 /usr/bin/iperf -s -D
testsrv:~ # service iperfd stop - El siguiente paso consiste en activar el script de arranque en los niveles de ejecución para su inicio automático durante el arranque del OS. Por defecto el arranque se dará en los niveles de ejecución 3 y 5 como bien se ha definido en la directiva Default-Start de la cabecera del script, en fin, el comando es el que sigue a continuación:
testsrv:~ # chkconfig --add iperfd
Para listar los niveles de ejecución en los cuales se inicia el servicio que hemos registrado lo podemos hacer como sigue:
iperfd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
testsrv:~ #testsrv:~ # chkconfig --list iperfd
Si solo queremos deshabilitar el arranque automático del servicio podemos desactivar los niveles de ejecución:
iperfd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
testsrv:~ #testsrv:~ # chkconfig iperfd off
También podemos volver a activar el servicio en los niveles de ejecución de la siguiente manera:testsrv:~ # chkconfig iperfd on
Si queremos definir manualmente los niveles de ejecución para nuestro servicio primero debemos desactivar los niveles de ejecución configurados por defecto y luego especificar los nuevos niveles de ejecución, esto lo podemos hacer con los siguientes comandos:testsrv:~ # chkconfig --level 35 iperfd off
Para desactivar completamente el arranque automático de los niveles de ejecución del sistema operativo lo podemos hacer de la siguiente forma:
testsrv:~ # chkconfig --level 345 iperfd ontestsrv:~ # chkconfig --del iperfd
iperfd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
testsrv:~ #
Plantillas de ejemplo
En el directorio /etc/init.d/ se encuentran algunos archivos que pueden ser utilizados como plantillas para crear nuestros propios archivos de inicio para openSUSE. Estos son los siguientes:/etc/init.d/skeleton
/etc/init.d/skeleton.compat
Comentarios
Publicar un comentario