Upstart es un sistema de arranque se servicios o aplicaciones en Linux que solventa algunas deficiencias del System V.
El demonio init presenta deficiencias por ejemplo en la exploración de nuevos dispositivos de almacenamiento, memorias USB, carga de drivers antes de la detección del hardware. Esto es debido a su carácter síncrono, se bloquean tareas hasta que la tarea anterior se ha completado, y a que las tareas han de ser definidas por adelantado y sólo pueden ser ejecutadas cuando se reinicia el sistema o se cambia de runlevel.
Upstart es totalmente compatible con System V y puede ejecutar todos sus scripts sin modificación alguna.
Upstart está basado en eventos para el demonio init y gestiona los servicios que se arrancan al inicio y gestiona las tareas mientras el sistema está arrancado. Upstart sigue arrancando el proceso init como primero del sistema con PID 1 pero a diferencia de System V, puede arrancar los servicios en paralelo, es decir, de forma asíncrona.
En el directorio /etc/event.d/ hay una serie de eventos (ficheros) que Init ejecuta según el orden y las dependencias establecidas en los mismos. En estos ficheros (eventos) se indican qué tarea ejecutar, cuándo y cómo, mediante su propio lenguaje.
Nomenclatura de los ficheros de eventos:
exec <orden><argumentos>
Ejecuta la orden con los argumentos indicados. Por ejemplo:
exec /etc/rc.d/rc 0 exec /sbin/mingetty tty2
script . . . end script
Ejecuta el script indicado. Por ejemplo:
script set $(runlevel || true) if [ "$2" != "0" ] && [ "$2" != "6" ]; then set $(runlevel --set 0 || true) fi if [ "$1" != "unknown" ]; then PREVLEVEL=$1 RUNLEVEL=$2 export PREVLEVEL RUNLEVEL fi exec etc/rc.d/rc 0 # Combina exec con script end script
start on <event>
Describe bajo qué condiciones se lanza ese evento. Ejemplo:
start on startup start on stopped rc2 start on runlevel 5 start on started prefdm
stop on <event>
Describe bajo qué condiciones de para el evento. Por ejemplo:
stop on runlevel [35] stop on started prefdm
respawn
Vuelve a lanzar ese proceso o demonio cuando muera.
console
Indica hacia donde se redirigirá la salida generada por el evento.
pre-start
Ejecuta la orden o script antes de lanzar el proceso. Por ejemplo:
pre-start exec rm -f /var/run/crond pre-start script if [ "$RUNLEVEL" == "S"] then RUNLEVEL=1 fi end-script
post-start
Ejecuta la orden o script después de lanzar el proceso. Por ejemplo:
post-start exec touch/var/run/crond post-start script if [ "$RUNLEVEL" == "1"] then RUNLEVEL=S fi end-script
pre-stop
Ejecutar la orden o script antes de parar ese proceso. Por ejemplo:
pre-stop exec ... pre-stop script / end-script
post-stop
Ejecuta la orden o script después de parar el proceso. Por ejemplo:
post-stop exec ... post-stop script / end-script
Por compatibilidad con System V se incluyen en /etc/even.d una serie de ficheros rc[X] que lo que hacen es llamar a los scripts correspondientes en /etc/rc.d. Es decir los script de ejecución del runlevel de System V se ejecutan como un evento en Upstart.