Cómo usar Systemd
Anuncio:
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
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
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
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
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
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.
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!