Upstart

Rafa Morales 11 Septiembre 2013
4min
0
Linux

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