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,
Gracias por el aporte, desde que cambiaron el sistema ando más perdido que tarzán en un desierto. Apenas he usado alguna vez este comando para ver como estaba mi base de datos. Habrá que hacerle un hueco.
Y si primeramente queremos saber si Systemd se está ejecutando en nuestro sistema no tenemos más que hacer:
# ps -eaf | grep [s]ystemd
(debe aparecer como demonio padre, esto es, PID=1)
Además de conocer el conocer el estado de una unidad, de iniciarla o pararla, de habilitarla o deshabilitarla, también se puede la puede «matar».
Y se la puede matar de dos formas, haciendo:
# systemctl kill nombre.service (le manda una señal SIGTERM)
# systemctl kill -s SIGKILL nombre.service (le manda una señal más severa, SIGKILL)
Venga, que aproveche.