Systemd: Targets (multi-user.target, graphical.target)
Introducción
Los targets de systemd son el equivalente moderno a los runlevels del antiguo SysVinit. Un target agrupa un conjunto de unidades que deben estar activas para alcanzar un determinado estado del sistema (modo texto, modo gráfico, rescate, etc.).
Equivalencia runlevel → target
Runlevel Target systemd Descripción
0 poweroff.target Apagado
1 rescue.target Modo rescate (un solo usuario)
2,3,4 multi-user.target Modo multiusuario sin gráficos
5 graphical.target Modo multiusuario con gráficos
6 reboot.target Reinicio
Targets principales
multi-user.target
Modo multiusuario sin entorno gráfico. Equivale al runlevel 3. Es el target habitual en servidores. Incluye red, login por terminal y todos los servicios típicos de un servidor.
graphical.target
Modo multiusuario con entorno gráfico. Equivale al runlevel 5. Incluye todo lo de
multi-user.target más el gestor de sesión gráfica (GDM, LightDM, SDDM…).
rescue.target
Modo de rescate con un único usuario y mínimos servicios. Equivale al antiguo runlevel 1 o modo monousuario. Útil para reparar el sistema.
emergency.target
Modo de emergencia aún más mínimo que rescue. Solo monta el sistema de archivos raíz en solo lectura. Se activa cuando hay errores críticos en el arranque.
Comandos para gestionar targets
Ver el target actual y el predeterminado:
$ systemctl get-default # target predeterminado al arranque
$ systemctl list-units --type=target # targets activos ahora
Cambiar el target predeterminado:
# systemctl set-default multi-user.target # servidor sin gráficos
# systemctl set-default graphical.target # con entorno gráfico
Cambiar al target de forma temporal (sin reiniciar):
# systemctl isolate multi-user.target # cambiar ahora a modo texto
# systemctl isolate graphical.target # cambiar ahora a modo gráfico
# systemctl isolate rescue.target # entrar en modo rescate
isolate cambia al target indicado de forma inmediata, deteniendo los servicios que no pertenecen a
ese target e iniciando los que sí pertenecen.
Apagar y reiniciar mediante targets:
# systemctl poweroff # apagar el sistema (activa poweroff.target)
# systemctl reboot # reiniciar (activa reboot.target)
# systemctl halt # detener CPU sin apagar
# systemctl suspend # suspender a RAM
# systemctl hibernate # hibernar a disco
Compatibilidad con el antiguo runlevel
El comando runlevel sigue funcionando en sistemas con systemd por compatibilidad:
$ runlevel
N 5 # N = anterior (ninguno), 5 = actual
$ who -r # también muestra el runlevel actual