
Las distribuciones modernas de Linux utilizan un proceso init llamado upstart desplazando el antiguo sistema SysV de scripts de inicio. Upstart hace lo mismo que SysV, pero Upstart está diseñado para manejar mejor y dinámicamente los cambios del hardware hot-plug, aquel hardware que se conecta y se desconecta del sistema mientras éste se está ejecutando. Por ejemplo, puede lanzar un script en función de si un determinado hardware se ha conectado o no.
Upstart mantiene la compatibilidad con el sistema SysV, sin embargo, posee sus propios scripts entre otras diferencias. Upstart elimina el fichero /etc/inittab así como los directorios específicos para cada runlevel, en su lugar existe un conjunto de scripts de inicio que reemplazan a dicho fichero y a los específicos del runlevel.
Por tanto, hasta que todos los desarrolladores se hayan pasado al sistema Upstart, vamos a encontrarnos servicios que aún utilicen el sistema de inicio de SysV, y sus herramientas sólo podrán manejar esos servicios. Debemos ser muy cuidadosos con este tema.
En el directorio /etc/init se encuentran los scripts de arranque de cada servicio. Encontraremos un fichero con extensión .conf y el nombre del servicio. Se tratan de ficheros de texto plano y no deberían de ser ficheros ejecutables. Por ejemplo:
/etc/init/cups.conf
Vamos a analizar el contenido de estos ficheros.
description
Información sobre el trabajo que realiza el servicio.
author
Información sobre el autor del servicio.
start on / stop on
Nos permite arrancar o parar el servicio automáticamente en función de algunos eventos del sistema.
El primer evento que emite Upstart es startup que se produce cuando la máquina es arrancada, antes de montar los sistemas de ficheros en modo de escritura y de habilitar la red, así que podemos arrancarlo en ese momento con:
start on startup
Para arrancar o parar el servicio en un determinado runlevel:
start on runlevel [235] stop on runlevel [5]
Para arrancarlo o pararlo según los eventos que produzcan otros servicios o trabajos:
start on stopped rcS start on started tty1 stop on started cups
exec / script
Sirve para especificar lo que se va a ejecutar con este script.
exec ofrece la ruta absoluta al ejecutable binario del sistema de archivos junto con sus parámetros.
exec /bin/foo --opt -xyz foo bar
script ofrece el código del Shell Script que se ejecutará usando /bin/sh. Si a esto le añadimos el parámetro -e cualquier comando que falle hará que termine la ejecución del script. Es obligatorio incluir el código entre las palabras clave script y end script.
script # do some stuff if [ ... ]; then ... fi end script
pre-start / post-start / pre-stop / post-stop
Se puede incluir la ejecución de un ejecutable o de un código Shell Script en el comienzo o final de la sección exec o script. Desde aquí no se puede arrancar el proceso en sí del servicio.
pre-start exec / pre-start script
Se ejecutará antes de arrancar el servicio mientras no de ningún error.
post-start exec / post-start script
Se ejecutará cuando el servicio principal se vaya a arrancar pero antes de entrar en el estado “ejecución”.
pre-stop exec / pre-stop script
Se ejecutará justo después de que el servicio reciba la señal de terminar.
post-stop exec / post-stop script
Se ejecutará al finalizar completamente el servicio.
pre-start script # prepare environment mkdir -p /var/run/foo end script post-stop script # clean up rm -rf /var/run/foo end script
console
Permite cambiar la entrada y salida de datos del servicio. output redirige a la actual salida y entrada, owner redirige al poseedor de la consola y none a /dev/nul.
console output
Manejando scripts
start
Permite arrancar uno de los servicios configurados en Upstart.
start cups
service cups start
stop
Permite parar uno de los servicios configurados en Upstart.
stop cups
service cups stop
status
Permite conocer el estado de alguno de los servicios configurados en Upstart.
status cups
reload
Permite recargar los archivos de configuración del servicio sin detenerlo.
reload cups service cups reload
initctl list
Permite conocer el estado de todos los servicios configurados en Upstart.
initctl list
Enlaces transversales de Book para Upstart
Upstart escrito por Rafa Morales está protegido por una licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional