fbpx Runlevels en Linux: Cambiar nivel de ejecución en terminal | Certificação Linux

Runlevels Linux: Cambiar niveles de ejecución con System V y systemd

📅 06/03/2019 ⏱ 7 min ✍️ Uira Ribeiro
Linuxcomandoscómo-hacer
Runlevels Linux: Cambiar niveles de ejecución con System V y systemd
Exam Pass App — mais de 7.000 questões LPI, offline, em 5 idiomas, disponível no Android e na App Store
Disponible en
Google Play
Disponible en
App Store

Aprende a alterar los niveles de ejecución - Runlevels - en Linux, utilizando los comandos init de systemv

Linux posee tres grandes sistemas especiales de carga de los servicios durante el proceso de boot y también responsable de iniciar todos los procesos: System V Init Daemon, Systemd y Upstream (se usaba en Ubuntu - ¡ya no más!).

System V Init Daemon

El System V Init Daemon fue heredado de UNIX, que recibió el nombre de System V init Daemon (System Five) o simplemente init.

Su función básica es cargar los servicios durante el proceso de carga del sistema, tales como el soporte a red, multiusuario, apache, mysql, y demás servicios de la máquina.

Durante el proceso de carga de Linux, el sistema de boot (GRUB) carga la imagen del kernel en la memoria.

Tan pronto como el Kernel asume el control de la máquina, este carga un programa especial llamado init y que siempre tiene el PID 1.

A partir de ahí, todos los demás procesos ejecutados en la máquina son hijos del proceso init, que tiene el PID 1.

Esto porque, cuando el usuario ejecuta un programa, el kernel hace una copia del init a través de un método llamado FORK y carga el código de máquina del programa deseado encima del código de máquina del clon del init que fue creado.

Puedes ver esta relación con el comando pstree:

# pstree

Runlevels en Linux

En Linux existen siete niveles de ejecución predefinidos de 0 a 6. Los servicios que cada runlevel puede ejecutar van a depender de la distribución de Linux y de la configuración que el administrador del sistema efectuó.

TABLA - Runlevels de Linux

# Descripción
0 El nivel cero define un apagado elegante y rápido del sistema.
1,s El nivel uno es utilizado para mantenimiento del sistema, también llamado monousuario (single user). Solo lo esencial es ejecutado.
2 Modo multiusuario con compartición de archivos NFS deshabilitado.
3 Modo multiusuario con todos los servicios habilitados, pero sin interfaz gráfica para el inicio de sesión en el sistema.
4 No utilizado.
5 Modo multiusuario con todos los servicios habilitados, interfaz gráfica X11 e inicio de sesión en modo gráfico.
6 El nivel seis es parecido con el nivel cero, pero ejecuta el reinicio de la máquina.

Por defecto, las distribuciones utilizan el nivel 0 para una secuencia de apagado (shutdown) elegante y el nivel 6 para el reinicio. Y los runlevels 3 a 5 son utilizados para carga normal del sistema.

El nivel 1 también conocido como monousuario es utilizado para mantenimiento del sistema, como, por ejemplo, recuperar una partición de datos con problemas.

El administrador del sistema puede en cualquier momento alterar el nivel de ejecución a través del comando init seguido del número del runlevel deseado.

# init 5

o

# telinit 6

El comando telinit es un enlace hacia el init.

Es importante saber que el cambio de nivel de ejecución puede alterar los procesos en ejecución e incluso apagar el sistema.

¿Qué Procesos Serán Ejecutados por cada Runlevel?

Hasta ahora aprendimos que el comando init puede alterar los procesos en ejecución alterando los runlevels del sistema.

Pero la definición de qué procesos serán ejecutados por cada nivel de ejecución es hecha por la jerarquía de directorios /etc/rc.d y scripts de shell.

Cuando Linux inicia, una serie de scripts en el directorio /etc/rc.d es ejecutada para dar la carga al sistema. Veamos estos archivos y directorios con detalle:

El archivo rc.sysinit es ejecutado por el proceso init durante la carga del sistema y habilita funciones esenciales. Por ejemplo montar las particiones de disco;

El archivo rc.local es ejecutado por el script rc.sysinit. Es utilizado por los administradores para modificar los servicios en la carga del sistema. Este archivo tiene preferencia para esta tarea ya que no es alterado durante un proceso de actualización (upgrade) del sistema;

El archivo rc es utilizado para transiciones entre los runlevels;

El directorio /etc/rc.d/init.d contiene los diversos scripts que realizan la carga de todos los servicios del sistema operativo.

Por ejemplo el servicio de shell seguro SSH posee un script para carga del servicio con el nombre sshd (Secure Shell Daemon). Este script y otros scripts pueden aceptar como parámetro comandos como start y stop. Otros servicios pueden aceptar otros comandos como reload, restart, status, etc.

Los niveles de servicio son definidos a través de los directorios /etc/rc<n>.d, donde <n> puede variar de 0 a 6, correspondiendo a los runlevels.

Por ejemplo /etc/rc0.d y /etc/rc1.d. Dentro de cada directorio de runlevel existen enlaces simbólicos para los scripts de los servicios en los archivos en /etc/rc.d/init.d.

Estos enlaces simbólicos siguen el siguiente patrón:

[K|S]nn[nombredelscript]

Donde:

La letra K, de kill, indica que el script es para terminar un determinado servicio;

La letra S, de start, indica que el script es para cargar un determinado servicio;

Los números enteros nn indican la secuencia de ejecución de los scripts, donde el menor número es ejecutado primero.

Si existen en el mismo runlevel servicios con el mismo número de orden de ejecución, el orden será indeterminado.

La secuencia de los números garantiza que un servicio que dependa de otro solamente sea ejecutado después de que la dependencia sea satisfecha;

El nombre del script para el enlace simbólico no es necesario para el funcionamiento correcto, pero para facilitar la lectura humana.

Por ejemplo:

# /etc/rc.d/rc3.d/S23httpd -> /etc/rc.d/init.d/httpd

Para incluir un determinado servicio en algún runlevel deseado, deberá copiar el script de carga en el directorio /etc/rc.d/init.d y crear un enlace simbólico al script en el runlevel deseado siguiendo la nomenclatura anterior.

Vea el ejemplo:

# cp /usr/local/mailman/mailman.sh /etc/rc.d/init.d

# ln –s /etc/rc.d/init.d/mailman.sh /etc/rc.d/rc3.d/S25mailman

Definiendo el Runlevel Predeterminado

El archivo que define cuál es el runlevel que el sistema asumirá durante la carga es el /etc/inittab. En este archivo busque la línea:

id:n:initdefault

Donde n definirá el runlevel por su número del 0 al 6. Nunca coloque en este archivo el runlevel 0 o 6 o el sistema nunca entrará en producción.

Podrá determinar en qué runlevel se encuentra el sistema en ejecución mediante el comando runlevel.

Este comando retorna el nivel de ejecución anterior y el nivel de ejecución actual. Si el nivel de ejecución permaneció inalterado desde la carga del sistema, el nivel anterior se mostrará como la letra N.

El comando runlevel no altera el nivel de ejecución, sino que solo informa. Para alterar utilice el comando init.

Aprenda mucho más sobre Linux en nuestro curso en línea. Puede realizar la inscripción aquí con trial de 7 días gratis. Si ya tiene una cuenta, puede acceder aquí.

¿Le gustó? Compartilhe :-)

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Después de años viendo profesionales perder horas en tareas simples por no conocer las herramientas correctas de Linux, decidí enseñar.
Hoy soy autor de la mayoría de los Materiales de Aprendizaje oficiales de la LPI y mentor de más de 14,000 alumnos certificados.

Conoce mi historia completa →

Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.

Certificação Linux — a plataforma líder em certificações Linux no Brasil
WhatsApp