Como funcionan los runlevel del sistema

Como funcionan los runlevel del sistema GNU/Linux

El runlevel (del inglés, nivel de ejecución) es cada uno de los estados de ejecución en que se puede encontrar el sistema GNU/Linux. 

El sistema se carga según la configuración que tenga establecida, y según el runlevel que tenga, se cargara el sistema de una manera u otra.

Visto de forma simple, los runlevel  determinan qué programas se ejecutan al inicio del sistema.


  • 0    » Apagado del sistema
  • 1    » Modo monousuario
  • 2    » Modo multiusuario (Por defecto)
  • 3-5 » Igual que runlevel 2
  • 6    » Reinicio del sistema
Pasemos a describir cada runlevel:


  • El runlevel 0 es la condición de apagado del sistema. La mayoría de ordenadores actuales se apagarán al llegar a este nivel.
  • El 1 es conocido como de monousuario o usuario único. Suele llamarsele modo de rescate (rescue mode ó trouble-shooting). En este nivel no se ejecuta ningún servicio o demonio. Normalmente es posible iniciar el sistema en modo rescate desde el GRUB, o añadiendo la palabra single al final de la línea de comandos del kernel.
  • Del runlevel 2 al 5 son modos multiusuario, y el modo usado por defecto.
  • Si el 0 era la condición de apagado, el 6 es la señal de reinicio del sistema. Es exactamente igual que el runlevel 0 salvo que reinicia al terminar la secuencia en lugar de apagar.

 ¿Dónde residen los Run Level?

Como todo en un sitema Linux, están definidos mediante ficheros, y se encuentran bajo el directorio /etc:

/etc/rc0.d       Run level 0
/etc/rc1.d       Run level 1
/etc/rc2.d       Run level 2
/etc/rc3.d       Run level 3
/etc/rc4.d       Run level 4
/etc/rc5.d       Run level 5
/etc/rc6.d       Run level 6
 
Veamos el contenido del runlevel 2: 
 
stuxnet@nimda:/etc/rc2.d# ls -ltr
total 4
-rw-r--r-- 1 root root 677 Apr  6  2015 README
lrwxrwxrwx 1 root root  14 Jan 31  2017 S01motd -> ../init.d/motd
lrwxrwxrwx 1 root root  17 Jan 31  2017 S01rsyslog -> ../init.d/rsyslog
lrwxrwxrwx 1 root root  19 Jan 31  2017 S06rmnologin -> ../init.d/rmnologin
lrwxrwxrwx 1 root root  18 Jan 31  2017 S06rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root  18 Jan 31  2017 S05bootlogs -> ../init.d/bootlogs
lrwxrwxrwx 1 root root  13 Jan 31  2017 S03ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root  15 Jan 31  2017 S03rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root  16 Jan 31  2017 S03gdomap -> ../init.d/gdomap
lrwxrwxrwx 1 root root  14 Jan 31  2017 S03dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root  14 Jan 31  2017 S03cron -> ../init.d/cron
lrwxrwxrwx 1 root root  13 Jan 31  2017 S03atd -> ../init.d/atd
lrwxrwxrwx 1 root root  15 Jan 31  2017 S03acpid -> ../init.d/acpid
lrwxrwxrwx 1 root root  17 Jan 31  2017 S02apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root  15 Jan 31  2017 S04exim4 -> ../init.d/exim4
lrwxrwxrwx 1 root root  15 Jan 31  2017 S03mysql -> ../init.d/mysql
lrwxrwxrwx 1 root root  13 May  2  2017 S03ntp -> ../init.d/ntp
lrwxrwxrwx 1 root root  18 Jan 19 16:56 S03iptables -> ../init.d/iptables


Cada fichero es un enlace simbólico a su respectivo script residente en /etc/init.d. Estos scripts controlan la detención o inicio de un servicio.

El nombre de los enlaces de estos directorios puede ser poco intuitivos al principio, pero veamos su significado, la sintaxis es:

[K | S] + nn + [string]
 
Es decir, la primera letra del nombre puede ser una K o una S, seguidas de un número de dos dígitos, del 01 al 99 y por último una cadena de texto. La K significa que el servicio será detenido al entrar al runlevel (Kill), la S para iniciarlo (Start). El número indica la prioridad del servicio dentro del runlevel, por ejemplo, S02apache y S01php iniciará primero php y luego apache. Si dos servicios tienen el mismo orden de prioridad numérico, se procede en orden alfabético. 

Para saber en que nivel o runlevel estamos, deberemos de escribir:

Cómo agregar un servicio a un runlevel

# runlevel
 
Si deseamos agregar un servicio a un runlevel deberemos usar el comando update-rc.d. Por ejemplo, si quieres que nginx o Apache se ejecuten en cada inicio del sistema, basta con agregarlos a los runlevel 2-5, correspondientes al modo multiusuario:

# update-rc.d nginx start 90 2 3 4 5 . stop 01 0 1 6 .

El 90 es el número de prioridad para el inicio (S90nginx) aplicado a los runlevles 2-5, el 01 para la prioridad de detención (K01nginx) en los runlevel 0 1 y 6. Lo más sencillo es aplicar los valores por defecto con:
 
# update-rc.d lighttpd defaults

Comentarios

Entradas más populares de este blog

RDP Servidor de Escritorio Remoto en Debian 9 Stretch

Vulnerability - Check for SSL Weak Ciphers Windows 10, Windows Server 2016, Windows Server 2008

Analizando la seguridad de SSL/TLS con testssl.sh