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 # 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_exit
Enlace: Script en Github Gist.
Algunas 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 iperfd 0:off 1:off 2:off 3:on 4:off 5:on 6:off testsrv:~ #
Para listar los niveles de ejecución en los cuales se inicia el servicio que hemos registrado lo podemos hacer como sigue:
testsrv:~ # chkconfig --list iperfd iperfd 0:off 1:off 2:off 3:on 4:on 5:on 6:off testsrv:~ #
Si solo queremos deshabilitar el arranque automático del servicio podemos desactivar los niveles de ejecución:
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 testsrv:~ # chkconfig --level 345 iperfd on
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 --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