Desde 2.015, la mayoría de las principales distribuciones Linux adoptaron systemd como el sistema de inicio predeterminado, frente al tradicional SysV. Todo ello a pesar de las opiniones encontradas sobre este sistema de inicio. Sin embargo, muchos todavía no nos hemos acostumbrado a él, o bien, mezclamos parte de nuestras anteriores rutinas con el uso de systemd. Sin embargo, dado el amplio uso de este sistema, es importante conocer su uso y funcionamiento. En este artículo, nos centraremos en systemd y systemctl, que es la herramienta central para controlar el sistema de inicio.
Systemd y Systemctl
¿Que es Systemd?
Según la propia página de Systemd,
systemd es un gestor del sistema y de los servicios para Linux, compatible con los initscript SysV y LSB.
Las unidades
Un elemento fundamental dentro de Systemd son las unidades, que pueden ser:
- Servicios
- Puntos de montaje
- Dispositivos
- Sockets
- Puntos de montaje automático
- Un archivo o partición de intercambio
- Un unidad de destino
- Un directorio o archivo monitorizado
- Un contador de tiempo controlado
- Grupos de recursos
Básicamente el archivo de una unidad está
compuesto de tres partes [Unit]
,
donde se describe la unidad. Una segunda parte que
puede ser de diferente tipo [Service]
para un servicio, [Socket]
para un
socket, etc. Y una tercera parte [Install]
Inspeccionar las unidades
Aquí es donde entra en juego la herramienta que he comentado en la introducción, systemctl. Con esta herramienta, podemos ver las unidades activas, para lo que ejecutaremos la orden,
systemctl
Al ejecutar esta orden veremos varias columnas,
UNIT
donde aparece el nombre de la unidadLOAD
si la unidad ha sido procesada por systemd. La configuración de las unidades procesadas está en memoria.ACTIVE
en esta columna podemos ver si la unidad se ha ejecutado correctamente o no.SUB
nos muestra información detallada sobre la unidad.DESCRIPTION
nos muestra el texto configurado en la parte[Unit]
de la unidad
Si queremos ver las unidades que han tenido algún
tipo de problema, lo ejecutaremos con la opción --failed
,
systemctl --failed
Los archivos de las unidades disponibles los
podemos encontrar en los directorios /etc/systemd/system/
y /usr/lib/systemd/system
. Aunque el
primero tiene preferencia sobre el segundo.
Además podemos listar las unidades en función de
su estado, systemctl list-units --all
--state=inactive
o del tipo de unidad systemctl
list-units --all --type=service
La opción list-units
solo lista las
unidades que el sistema ha intentado cargar en
memoria. Para ver todas las unidades disponibles
en el sistema, la orden a ejecutar es,
systemctl list-unit-files
El registro de Systemd
Si detectamos alguna unidad que falla, podemos revisar el sistema de registro propio de Systemd que se llama journal. Para ello ejecutaremos la siguiente orden,
journalctl
Por supuesto, podemos utilizar journalctl
en combinación con grep
para
localizar aquello que buscamos, pero además nos
proporciona algunas herramientas que nos ayudaran
en esa tarea.
journalctl -b
nos muestra los mensajes del arranquejournalctl -f
permite seguir los mensajes nuevosjournalctl -u <unidad>
nos muestra los mensajes de una determinada unidadjournalctl _PID=<proceso>
muestra los mensajes de un proceso específico
El estado de las unidades
Para comprobar el estado de una unidad ejecutaremos la siguiente orden,
systemctl status unidad
Por ejemplo, si queremos conocer si nuestro servidor de bases de datos MariaDB está en funcionamiento, ejecutaremos la orden,
systemctl status mariadb.service
En el caso de los servicios podemos omitir la
extensión, es decir, la orden anterior sería
equivalente a systemctl status mariadb
.
También podemos saber si una determinada unidad
está activa ejecutando la orden, systemctl
is-active unidad
que nos devolverá active
o inactive
. Mientras que para saber
si la unidad está habilitada, ejecutaremos la
orden, systemctl is-enabled unidad
que nos devolverá el valor enabled
o
disabled
.
Hay un tercer estado en el que pueden estar las
unidades, que es el estado fallo
.
Para averiguar si una unidad está en fallo,
ejecutaremos la orden systemctl is-failed
unidad
que nos devolverá active
ó failed
; o en el caso de que se
halla detenido de forma intencionada nos devolverá
el valor unknown
o inactive
.
Gestionando unidades
Con lo que hemos visto hasta el momento, ya sabemos el estado de una unidad, pero, ¿como podemos cambiar el estado de una unidad?
Para habilitar una unidad ejecutaremos la orden sudo
systemctl enable unidad
. Una vez
habilitada la unidad la podemos iniciar, para lo
que ejecutaremos la orden sudo systemctl
start unidad
. Si queremos detener una
unidad ejecutaremos la orden sudo systemctl
stop unidad
mientras que si lo que
queremos hacer es reiniciar la unidad,
ejecutaremos la orden sudo systemctl
restart unidad
.
También es posible marcar una determinada unidad
como imposible de iniciar tanto de forma
manual como de forma automática. Al marcar la
unidad de esta manera se apunta a /dev/null
.
Esta operación se conoce como enmascarar la
unidad y se hace ejecutando la siguiente
orden,
sudo systemctl mask unidad
Si una vez enmascarada una unidad,
intentas iniciarla ejecutando la orden sudo
systemctl start unidad
verás un mensaje
de error indicándote que la unidad está
enmascarada. Para desenmascarar la
unidad ejecuta la orden, sudo systemctl
unmask unidad
que devolverá la unidad a
su estado anterior.
Conclusiones
En este primer artículo has visto como trabajar con Systemd. En particular, todo lo referente a las unidades, que tipos de unidades hay, como gestionarlas, etc. Así, en el próximo capítulo veremos como crear nuestras propias unidades y que utilidad les podemos dar.
Más información,