4.1.2.4. Runlevels¶
Systemd emula los niveles de ejecución de SysV a través de unidades de tipo target, que básicamente son agrupaciones de otras unidades service y pueden requerir la activación previa de otras unidades target. Las equivalencias son las siguientes:
Runlevel |
Unidad |
|
---|---|---|
(SysV) |
Nombre |
Alias |
0 |
poweroff |
runlevel0 |
1 |
rescue |
runlevel1 |
2 |
multi-user |
runlevel2 |
3 |
multi-user |
runlevel3 |
4 |
multi-user |
runlevel4 |
5 |
graphical |
runlevel5 |
6 |
reboot |
runlevel6 |
- |
emergency |
- |
Systemd define cinco targets distintos (poweroff.target, rescue.target, multi-user.target, graphical.target y reboot.target) correspondientes a los siete runlevels de SystemV. Por otro lado, emergency.target es un modo de funcionmiento mínimo aún más simple que el que proporciona rescue.target y que puede usarse en los casos en los que el sistema ni siquiera es capaz de entrar en este último modo.
Podemos comprobar la existencia de estas unidades equivalentes a los niveles de ejecución usando list-unit-files:
$ systemctl list-unit-files --type=target
UNIT FILE STATE
[...]
default.target static
[...]
emergency.target static
[...]
graphical.target static
[...]
multi-user.target static
[...]
poweroff.target disabled
[...]
reboot.target disabled
[...]
rescue.target disabled
[...]
runlevel0.target disabled
runlevel1.target disabled
runlevel2.target static
runlevel3.target static
runlevel4.target static
runlevel5.target static
runlevel6.target disabled
Obsérvese que se ha incluido default.target, porque esta unidad identifica cuál es el runlevel predeterminado. En realidad, es simplemente un enlace simbólico al target que identifica el modo en que quiere arrancarse. El nivel predefinido es:
$ systemctl get-default
graphical.target
siempre que no hayamos estado trasteando antes, ya que esta orden nos devuelve el nivel de ejecución en que arrancará el sistema. Para cambiarlo podemos hacer lo siguiente:
# systemctl set-default multi-user.target
Lo que provocará que el enlace default.target apunte ahora a multi-user.target[1]:
$ readlink /etc/systemd/system/default.target
/lib/systemd/system/multi-user.target
y que, a partir de ese momento, el sistema arranque siempre en el modo
multiusuario, con lo que no arrancará automáticamente el modo gráfico.
También es posible cambiar el runlevel modificando los parámetros que se pasan
al núcleo en su arranque. Para un cambio permanente habría que modificar el
fichero de configuración de grub (/etc/default/grub
) y regenerar los
menús (update-grub
), pero tal acción no tiene demasiado sentido en la
medida en que más limpio hacerlo a través de default.target. En cambio, sí
puede ser útil conocer esta posibilidad cuando se quiere hacer un arranque en
otro nivel de ejecución. En este caso, todo consistiría en editar la entrada
de grub al aparecer el menú (pulsando e), ir a la línea que indicar la
carga del núcleo y añadir al final:
systemd.unit=multi-user.target
o cualquier otro target en el que queramos arrancar[2].
Si lo que se pretende es cambiar de nivel de ejecución sobre la marcha, puede usarse isolate. Esto, por ejemplo:
# systemctl isolate poweroff.target
cambiaría inmediatamente al runlevel 0, o sea, apagaría la máquina.
Nota
Por retrocompatibilidad, Systemd proporcional el ejecutable telinit que permitía hacer esto mismo con sysv:
# telinit 0
Notas al pie