Cómo usar Systemd

Antonio J. Galisteo

En esta ocasión quiero mostrarte cómo usar Systemd, uno de los gestores de Linux y de servicios junto con Init.

Cómo listar todas las unidades de Systemd

Para listar las unidades de systemd solo debemos introducir el nombre systsemctl en la terminal:

systemctl

Esto mismo lo podemos hacer de la siguiente manera:

systemctl list-units
Ver los servicios de Systemd con systemctl


En la imagen anterior podemos ver que se nos muestran varias columnas, de izquierda a derecha vemos el nombre del servicio, si esta o no cargado, si están activos o no, si ha ocurrido algún error y por último vemos una descripción del servicio.

Si queremos mostrar todas la unidades aunque no estén cargadas usaremos la opción –all:

systemctl list-units --all
Ver todos los servicios de Systemd con systemctl


Si queremos filtrar por tipo de servicio podemos hacerlo de la siguiente mandera:

systemctl list-units --type=service

Con esto veremos solo aquellas unidades de tipo service.

Ver el estado de un servicio Systemd

Podemos ver el estado de un servicio con el siguiente comando:

systemctl status NetworkManager.service
Ver estado de un servicio


En realidad no es necesario que indiquemos el tipo (.service) solo se debe indicar si hay más de un servicio con el mismo nombre pero obviamente de distinto tipo.

Como puedes ver en la imagen anterior se muestran los últimos logs del servicio. Si quieres ver todos los logs de dicho servicio puedes usar la opción -l de la siguiente forma:

systemctl status NetworkManager -l
Ver los logs de un servicio


También podemos listar los ficheros de la siguiente forma:

systemctl list-units-files

De la misma forma que podemos ver el estado de un servicio podemos pararlo, arrancarlo, reiniciarlo o recargar la confiuración si la hemos cambiado (y el servicio lo permite) con:

systemctl stop NetworkManager
systemctl start NetworkManager
systemctl restart NetworkManager
systemctl reload NetworkManager

Estructura básica de un servicio Systemd

Si hacemos un cat de un servicio podemos ver su estructura, por ejemplo:

cd /etc/systemd/system
cat syslog.service
Estructura de un servicio Systemd en Centos7 y Centos 8


En la imagen anterior vemos que tiene tres secciones, la primera es Unit donde vamos a indicar la descripción, cuando se va a ejecutar, en este caso después de network.target y que es lo que requiere. Tenemos una segunda sección donde se define como tal el servicio y como debe ejecutarse. Y por último la sección de Install donde se define donde se va a instalar cuando se habilite el servicio.

Estados de un servicio en Systemd

A grandes rasgos, los diferentes estados que puede tener un servicio en Systemd son lo siguientes:

Loaded. Que se está cargado

Active. Cuando está activo puede tener a su vez 3 estados. Running, que se está ejecutando. Exited que ha terminado la ejecución. Waiting que está esperando para ser ejecutado.

Inactive. Como su propio nombre indica está inactivo.

Comandos de systemctl

Ahora quiero mostrarte algunos de los comandos que puedes usar con systemctl. Recuerda que siempre puedes usar la ayuda para ver que opcoines puedes usar con systemctl:

man systemctl

Con systemctl podemos apagar el sistema con cualquiera de los siguientes tres comandos:

systsemctl shutdown
systsemctl poweroff
systsemctl halt

Podemos también reiniciar el sistema con:

systemctl reboot

Con systemctl también podemos cambiar el nivel de ejecución por defecto del sistema (modo gráfico, de rescate y demás) con:

systemctl set-default X (del 1 al 5) 

Para ver que nivel estamos utilizando actualmente lo podemos hacer con:

systemctl get-default

Con set-defatul definimos el modo por defecto al que se llegará en el arranque, pero si queremos cambiarlo una vez hemos arracando lo haremos con isolate:

systemctl isolate graphical

Y nos cambiará a modo grafico ese momento. Lo podemos comprobar con runlevel donde podemos ver el nivel donde estabamos y en el que estamos ahora:

runlevel

Con systemctl también podemos configurar que un servicio se arranque al iniciar el sistema o no con:

systemctl enable httpd
systemctl disable httpd

Podemos ver si un servicio esta habilitado o activo con:

systemctl is-enabled httpd
systemctl is-active httpd

is-enabled nos indica si está configurado para arrancarse al inicio y is-active nos indica si está o no ejecutandose.

También es interesante ver las dependencias que tiene un servicio, ya que si esta fallando podemos ver de qué otros servicios depende por si no es problema de nuestro servicio propiamente dicho. Las dependencias se pueden ver de la siguiente forma:

systemctl list-dependencies httpd

Podemos enmascarar servicios. Esto crea un enlacde simbonlico a /etc/null para que nadie pueda habilitar el servicio. Si por ejemplo tenemos httpd y nginx y queremos que solo se ejecute nginx podemos enmascarar httpd para que nadie pueda arrancarlo manualmente. Esto lo vamos a hacer con:

systemctl mask httpd

En cualquier momento puedes quitar dicha máscara con:

systemctl unmask httpd

Con el siguiente comando vamos a poder ver cuanto ha tardado el sistema en arrancar y cuando tiempo ha invertido en el kernel, servicios y el espacio de usuario:

systemd-analize 

Para ver que es lo que ha llevado más tiempo en el arranque usaremos la opción blame:

systemd-analyze blame

Este comando nos mostrará una lista ordenada por tiempo de mayor a menor de los servicios que se han ejecutado al arrancar por lo que podemos ver si algún servicio está tomando más tiempo de lo habitual. Esta misma información podemos obtenerla de un modo más completo y guardarla en un archivo para poder revisarla mejor con plot:

systemd-analyze plot > /var/www/html/plot.html

Lo guardamos en un archivo html porque este comando devuelve la información en formato html5. Si ahora accedemos a ese archivo desde un navegador con:

http://192.168.0.150/plot.html

Podemos ver la información con un formato más amigable que el que nos devuelve blame en la terminal.

Ver tiempo de carga del sistema con Systemd


Otra funcionalidad muy interesante de Systemd son las Snapshots. Esto es útil por ejemplo cuando queremos actualizar el sistema y debemos parar algunos servicios, luego debemos recordar cuales hemos parado para volverlos a arrancar. Esto lo podemos hacer facilmente creando una instantánea y lo hacemos con:

systemctl snapshot nombre_snapshot

Con el nombre que le queramos dar, puede ser una fecha:

systemctl snapshot 2020-08-06

De este modo paramos los servicios, hacemos el mantenimiento que tengamos que hacer y luego volvemos a cargar el snapshot con:

systemctl isolate 2020-08-06.snapshot

Ya sabes cómo usar Systemd. También te puede interesar cómo ver los tipos de unitdades de systemd. Puedes aprender más en nuestra sección de servidores.

Espero que te haya sido de utilidad!

Publicado el 19-08-2020

Donar

Si te ha sido de ayuda y quieres hacer una donación te lo agradeceremos :)

Compartelo!


Deja un comentario

Comentanos

*

Ir arriba de la pagina