Los niveles de ejecución de Linux distinguen entre los estados operativos del sistema. Cambiar el nivel de ejecución cambiará los servicios que se están ejecutando. Puede personalizar los niveles de ejecución para que cada nivel comience con un conjunto específico de servicios.
Niveles de ejecución estándar
El kernel de Linux define siete niveles de ejecución estándar. Las distribuciones individuales del sistema operativo pueden personalizar estos niveles de ejecución o agregar otros adicionales. Los usuarios también son libres de crear y modificar niveles de ejecución.
- Nivel de ejecución 0 – Sin actividad, equivalente a apagado. El sistema está listo para una pérdida física de energía.
- Nivel de ejecución 1 – Ejecutando en modo de un solo usuario (rescate).
- Nivel de ejecución 2 – Ejecución en modo multiusuario sin redes ni gráficos.
- Nivel de ejecución 3 – Modo multiusuario con la adición de soporte de red.
- Nivel de ejecución 4 – Dejado para que los usuarios / distribuciones lo definan.
- Nivel de ejecución 5 – Modo de usuario múltiple con una interfaz gráfica de usuario.
- Nivel de ejecución 6 – Modo de reinicio del sistema.
La mayoría de los sistemas Linux arrancarán en el nivel de ejecución 5. Este es el nivel de ejecución con el que probablemente esté más familiarizado. Se encuentra disponible la gama más amplia de servicios, incluido un servidor de pantalla y una pila de red completa. Si está en un servidor sin cabeza y sin una pila de pantalla, es posible que esté en el nivel de ejecución 3.
Algunos sistemas de un solo usuario se iniciarán en el nivel de ejecución 1. También encontrará este nivel de ejecución si utiliza un modo de recuperación para rescatar su sistema. Esto le permite obtener acceso al shell sin iniciar sesión como usuario normal.
Los niveles de ejecución 2, 3 y 4 pueden variar según la distribución. Algunas distribuciones crearán una clara distinción entre cada nivel de ejecución; en otros, los tres pueden tener el mismo efecto. Generalmente, puede esperar que cualquiera de estos tres le proporcione un shell de texto para un solo usuario con redes disponibles.
Su sistema solo puede estar en un nivel de ejecución a la vez. Se seleccionará un solo nivel de ejecución después del arranque. No hará la transición de los niveles de ejecución a menos que inicie explícitamente un cambio. Por lo general, las únicas transiciones de nivel de ejecución que ocurren son de los niveles 1-5 al nivel 0 o 6, cuando su sistema se apaga o se reinicia.
Los niveles de ejecución más altos indican niveles crecientes de funcionalidad disponible. Esta convención es seguida por todas las distribuciones. Un nivel de ejecución bajo generalmente significa que solo se está ejecutando un subconjunto de los servicios del sistema.
Niveles de ejecución y servicios de inicio
Los servicios de inicio están acoplados a niveles de ejecución. Linux tradicionalmente agrega servicios de inicio a los niveles de ejecución. Cuando su sistema ingrese a un nivel de ejecución, se iniciarán todos los servicios asociados con ese nivel.
La forma en que se manejan realmente los servicios depende del administrador de servicios que esté utilizando. Las distribuciones individuales se envían con diferentes administradores de servicios. El gerente de servicio original, init
, define sus servicios dentro /etc/init.d
. Los scripts creados aquí se enlazan simbólicamente a /etc/rc
donde están ordenados por nivel de ejecución:
/etc/rc0.d
– Los scripts colocados aquí se ejecutan por nivel de ejecución 0 …/etc/rc1.d
– Scripts para el nivel de ejecución 1…/etc/rc2.d
-… etc.
Para agregar nuevos servicios de inicio, cree o edite un script en /etc/init.d
:
ms:345:respawn:/usr/bin/service_executable
A continuación, use chkconfig
para habilitar el servicio:
sudo chkconfig service_executable on
los 345:respawn
en la línea de guión instruye init
correr service_executable
cuando el sistema entra en los niveles de ejecución 3, 4 o 5.
Muchas distribuciones más nuevas han reemplazado init
con alternativas más modernas. Estos pueden proporcionar una abstracción de nivel superior sobre los niveles de ejecución y el sistema de inicio.
La mayoría de las distribuciones de Linux, incluidas Debian, Ubuntu, CentOS, Arch y Red Hat, ahora usan systemd
. Esto no hace referencia a los niveles de ejecución directamente; en su lugar, se convierten en «objetivos» que se identifican por su nombre. Si bien Linux solo puede estar en un nivel de ejecución a la vez, systemd
admite varios objetivos activos simultáneamente. El mapeo entre niveles de ejecución y objetivos es solo aproximado; es proporcionado para fines de compatibilidad.
El especial default
target define en qué se iniciará el sistema. los default
el objetivo suele estar vinculado al multi-user
objetivo: equivalente a un nivel de ejecución de 2 o superior.
Los servicios de cada objetivo se almacenan en un directorio de «deseos». Esto contendrá .service
archivos. Estos también son enlaces simbólicos que apuntan a definiciones de servicio en /usr/lib/systemd/system
.
ls -l /etc/systemd/system/multi-user.target.wants/*.service
Esto permite que las definiciones de servicio se creen una vez y se compartan con múltiples «objetivos». Cuando arranca Linux, systemd
seleccionará el objetivo indicado por el nivel de ejecución. A continuación, se cargarán los servicios deseados por ese objetivo. systemd
admite dependencias de servicios, por lo que se puede hacer que los servicios individuales esperen en otros servicios antes de comenzar.
Inspección del nivel de ejecución de su sistema
Puede averiguar el nivel de ejecución de su sistema utilizando el runlevel
mando. Esto imprimirá dos caracteres en la terminal. Muestran los niveles de ejecución anteriores y actuales de su sistema.
N 5
es una salida típica para un sistema Linux de escritorio. los 5
indica que está en una sesión gráfica multiusuario con redes disponibles. N
significa que no se pudo determinar el nivel de ejecución anterior, generalmente porque el sistema estaba apagado.
En algunos sistemas, es posible que pueda obtener los niveles de ejecución actuales y anteriores utilizando el $RUNLEVEL
y $PREVLEVEL
Variables de entorno. Si se establecen estas variables, la runlevel
comando simplemente emite sus valores.
También puede inspeccionar su nivel de ejecución actual usando el who
mando. Correr who -r
para ver el número de nivel de ejecución y la hora a la que se ingresó el nivel de ejecución.
Cambiar entre niveles de ejecución
Puede cambiar entre niveles de ejecución utilizando el telinit
mando. Esto le permite activar manualmente diferentes modos, como el modo de usuario único o el modo de rescate.
Corriendo telinit 0
apagará su máquina; telinit 6
debe iniciar un reinicio. Utilizando telinit
con los niveles de ejecución 1 – 5 activará el modo de funcionamiento correspondiente. Si actualmente está en modo de solo texto, telinit 5
intentará habilitar el servidor de visualización y entrar en modo gráfico.
Cuando usas systemd
, los systemctl isolate
El comando te permite activar un «objetivo» diferente. Se detendrán todos los servicios en ejecución; los servicios asociados con el nuevo destino y luego comience.
Aquí se explica cómo activar el multi-user
objetivo:
sudo systemctl isolate multi-user.target
Si desea realizar un cambio permanente en el nivel de ejecución, utilice el systemctl set-default
mando:
sudo systemctl set-default multi-user.target
Ahora el multi-user
El objetivo se seleccionará siempre que su sistema se reinicie.
Resumen
Los niveles de ejecución de Linux describen diferentes estados dentro del sistema operativo. Cada nivel de ejecución pone en capas una funcionalidad adicional en forma de servicios de ejecución adicionales.
Los niveles de ejecución bajos se utilizan comúnmente para los modos de recuperación y la operación de solo texto. Un sistema Linux de escritorio con un entorno gráfico generalmente estará en nivel de ejecución 5
. Debe consultar la documentación de su distribución para obtener una descripción detallada de los niveles de ejecución disponibles, ya que las implementaciones pueden variar.