Niveles de Ejecución en GNU/Linux

Linux Nivel Alto 14 de dic. de 2022

Hay que conocer los runlevel de Linux !

Cuando se administran servidores Linux, el uso del entorno gráfico, no suele ser necesario tenerlo activado, ya que consume recursos innecesarios.

Desde que tenemos systemclt (ya hace tiempo), ya no podemos cambiar los niveles de ejecución de una manera fácil, como cuando antiguamente simplemente editabamos el fichero /etc/inittab para cambiar los niveles de ejecución. Ahora todo se realiza mediante systemctl.

En este artículo te explicaré como cambiar de una manera fácil los niveles de ejecución de tu GNU/Linux con systemctl o mediante un simple enlace.

Averiguar el nivel de ejecución actual

Para obtener nuestro 'runlevel' actual simplemente deberemos escribir:

systemctl get-default

Y obtendremos (por ejemplo) la siguiente respuesta:

graphical.target

Esto nos indica que nuestro Linux está funcionando con todas las capacidades necesarias para poder ejecutar un entorno gráfico.

Lista de Niveles disponibles

Pero, ¿cuantos niveles tenemos disponibles para usar?
Para obtener el listado completo de niveles de ejecución usaremos el comando:

systemctl list-units --type=target

UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Local Encrypted Volumes
getty.target loaded active active Login Prompts
graphical.target loaded active active Graphical Interface
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target loaded active active Local File Systems
multi-user.target loaded active active Multi-User System
network-online.target loaded active active Network is Online
network.target loaded active active Network
nfs-client.target loaded active active NFS client services
nss-user-lookup.target loaded active active User and Group Name Lookups
paths.target loaded active active Paths
remote-fs-pre.target loaded active active Remote File Systems (Pre)
remote-fs.target loaded active active Remote File Systems
rpcbind.target loaded active active RPC Port Mapper
slices.target loaded active active Slices
sockets.target loaded active active Sockets
sound.target loaded active active Sound Card
swap.target loaded active active Swap
sysinit.target loaded active active System Initialization
time-sync.target loaded active active System Time Synchronized
timers.target loaded active active Timers
virt-guest-shutdown.target loaded active active Libvirt guests shutdown

LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.

23 loaded units listed.

Cambiar nivel de ejecución

Para cambiar a cualquiera de los 'target' disponibles simplemente usaremos el comando:

sudo systemctl set-default <nivel.target>

Ejemplo: Fijar el nivel, comprobar que se ha fijado y reiniciar para que nuestro servidor inicia en el 'runlevel' deseado.

sudo systemctl set-default multi-user.target
sudo systemctl get-default
  multi-user.target
sudo reboot

Proceso de Arranque para los Niveles de Ejecución

En el bootup (o inicio) de Linux, dependiendo de lo que hayamos escogido Linux seguira y cargará o no una serie de servicios para adaptarse al 'runlevel' que hemos escogido.
El mapa de bootup que se sigue respecto a los target es el siguiente:

Ruta del bootup de Linux según el target (runlevel)

Equivalencia con 'runlevel' (SysV)

Para los que esteis acostumbrados a los niveles 'runlevel' (SysV), os dejo una pequeña tabla de equivalencias:

Equivalencia entre RunLevel y Target

Cambiar target/runlevel sin usar systemctl

Tal y como aparece en la tabla anterior, el default.target es simplemente un enlace (link) al target deseado.

Podemos realizar nosotros mismos las mismas acciones o que realiza comando systemctl set-default <nivel-target> creando nosotros un link al target deseado:

sudo ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
sudo reboot

Equivalencia de otros comandos

Acción SysVInit Systemd
Detener SO halt systemctl halt
Apagar SO poweroff systemctl poweroff
Reiniciar reboot systemctl reboot
Suspender pm-suspend systemctl suspend
Hibernar pm-hibernate systemctl hibernate

Revisar los LOGs

  • SysVinit: tail -f /var/log/messages y tail -f /var/log/syslog
  • Systemd: journalctl -f

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux