GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo administrar unidades systemd al inicio

Systemd es un sistema de inicio y administrador de sistemas en sistemas Linux y es compatible con LSB y SysV. Puede usar systemd suite para administrar y optimizar los servicios y recursos de inicio del sistema en un sistema Linux. Es una herramienta práctica para que los administradores de sistemas pongan en marcha su sistema, optimicen procesos, depuren y resuelvan problemas de servicios del sistema.

Este artículo se basará en nuestra guía de la serie systemd e ilustrará cómo administrar unidades del sistema, montar sistemas de archivos, solucionar problemas y brindarle consejos y trucos cuando trabaje con sistemas.

Nuestra primera guía de systemd destacó por qué systemd es una herramienta práctica para los administradores de sistemas de Linux. El segundo ilustra cómo programar tareas del sistema con temporizadores systemd y automatizar las tediosas tareas de arranque del sistema.

Puesta en marcha de Linux

Como usuario retro de Linux, siempre existí (todavía existo) cuando el sistema Fedora arranca y páginas y páginas de mensajes de diagnóstico se desplazan antes de la solicitud de inicio de sesión. Estas páginas contienen información sobre los procesos de inicio, montajes de sistemas de archivos y mucho más. Para comprender cómo administrar y optimizar los servicios de puesta en marcha, echemos un vistazo rápido a lo que sucede entre el momento en que presiona el botón de encendido y el indicador de inicio de sesión.

Un proceso de inicio comienza con el inicio del hardware que inicializa el hardware del sistema, el inicio del sistema operativo que carga el Kernel, luego systemd y el inicio de Linux, donde systemd prepara los procesos del sistema. El proceso de puesta en marcha comienza cuando el Kernel transfiere el control del host al systemd. En este punto, un administrador de sistemas puede administrar servicios, unidades, sockets, activación de D-Bus, seguimiento de procesos, demonios y puntos de montaje del sistema de archivos.

Componentes de Systemd

Los siguientes son algunos componentes básicos del paquete de software systemd que puede usar para administrar el inicio de Linux.

  • systemd-boot:un administrador de arranque UEFI.
  • systemd-firstboot:administra la inicialización de la configuración básica del sistema antes del primer arranque.
  • systemd-logind:una herramienta de gestión de sesiones.
  • systemd-networkd:administrar configuraciones de red.
  • systemd-sysusers:una herramienta para crear grupos de usuarios del sistema y agregar usuarios a grupos en el momento del arranque.
  • systemd/Journal:administra el registro del sistema.
  • systemd/Timers:temporizadores para controlar eventos o archivos .service.

Sistemactl

Para administrar systemd, use el comando systemctl, que utiliza la funcionalidad del servicio de SysVinit y chkconfig. Puede usarlo para administrar unidades del sistema que son representaciones de servicios y recursos del sistema.

# systemctl daemon-reload

Gestión de unidades Systemd

Las unidades en systemd pueden ser servicios (.service), puntos de montaje (.mount), dispositivos (.device) o sockets (.socket). Systemctl proporciona diferentes comandos para administrar unidades.

Utilice el siguiente comando para analizar el estado del sistema:

$ systemctl status #Show system status 
$ systemctl or #List running units
$ systemctl list-units #List running units
$ systemctl --failed #List failed units
$ systemctl list-unit-files #List installed unit files1
$ systemctl status pid #Show process status for a PID

Utilice los siguientes comandos para comprobar el estado de la unidad:

$ systemctl help unit #Show a manual page associated with a unit
$ systemctl status unit #Status of a unit
$ systemctl is-enabled unit #Check whether a Unit is enabled

Usa los siguientes comandos para iniciar y recargar una unidad:

systemctl start unit  #start a unit immediately
systemctl stop unit   #stop a unit immediately
systemctl restart unit   #restart a unit
systemctl reload unit  #reload a unit and configurations
systemctl daemon-reload   #reload systemd manager configuration

Use los siguientes comandos para enmascarar una Unidad:

systemctl mask unit     #mask a Unit to make it impossible to start
systemctl unmask unit     #Unmask a unit

Usa los siguientes comandos para habilitar una unidad:

systemctl enable Unit   #enable a Unit to start automatically at boot
systemctl enable --now unit   #enable a Unit to start automatically and immediately at boot
systemctl disable unit   #disable a Unit to no longer start at boot
systemctl reenable unit     #disable and enable anew

Edición de archivos de unidades

Linux carga archivos de Unidad desde múltiples ubicaciones en su sistema. Puede ejecutar el comando [systemctl show –property=UnitPath] para ver la lista completa.

  •  /usr/lib/systemd/system/:unidades proporcionadas por los paquetes instalados.
  •  /etc/systemd/system/:unidades instaladas por el administrador del sistema.

Ejemplo de archivo de unidad:

/etc/systemd/system/unit.d/example_unit.conf
[Unit]
Requires=new dependency
After=new dependency

Manejo de dependencias

Puede resolver las dependencias de la unidad diseñando correctamente los archivos de la unidad.
Por ejemplo, si la unidad A requiere que la unidad B se ejecute antes de que se inicie A. Luego, agregue Requires=B y After=B a la sección [Unidad] de A.

# /etc/systemd/system/unit.d/example_unit.conf
[Unit]
Requires=B
After=B

Si la dependencia es opcional, agregue Wants=B y After=B.

/etc/systemd/system/unit.d/example_unit.conf
[Unit]
Requires=B
After=B
Wants=B

Nota:Las dependencias se ubican en los servicios y no en los destinos.

Tipos de servicio

Puede establecer diferentes tipos de servicios de puesta en marcha en un archivo de servicio personalizado con el parámetro Tipo=en la sección [Servicio]:

/etc/systemd/system/unit.d/example_unit.conf
[Unit]
Requires=B
After=B
Wants=B
[Service]
Type=simple
  • Type=simple (predeterminado):systemd considera que el servicio se inicia inmediatamente.
  • Type=forking:systemd considera que el servicio se inició una vez que el proceso se bifurca y el padre ha salido.
  • Type=oneshot:puede usarlo para secuencias de comandos que realizan un solo trabajo y luego salen. Puede configurar RemainAfterExit=yes para que systemd aún pueda considerar el servicio activo después de que el proceso haya finalizado.
  • Type=idle:systemd retrasará la ejecución del servicio binario hasta que se envíen todos los trabajos.
  • Type=notify:puede usarlo como Type=simple, pero el demonio le indicará al systemd cuando esté listo.
  • Type=dbus:el servicio se considera listo cuando el BusName especificado aparece en el bus del sistema de DBus.

Archivos de unidad de reemplazo

Puede reemplazar un archivo de unidad en [/usr/lib/systemd/system/] creando un nuevo archivo de unidad con un nombre similar y volviendo a habilitar la Unidad para actualizar los enlaces simbólicos.

# systemctl reenable Unit

Alternativamente, puede ejecutar el comando [# systemctl edit –full Unit] que abre el archivo de la unidad en su editor y lo vuelve a cargar automáticamente cuando termina de editar.

# systemctl edit --full Unit

Archivos desplegables

Puede crear un archivo de unidad desplegable creando el directorio /etc/systemd/system/unit.d/ y colocando su nuevo archivo .conf. El archivo anulará o agregará nuevas opciones de configuración. systemd analizará y aplicará estos archivos sobre el archivo Unit original.

Como alternativa, ejecute el siguiente comando [# systemctl edit unit] para abrir el archivo /etc/systemd/system/unit.d/new_override.conf en un editor de texto y recargar automáticamente el archivo de la unidad.

Revertir cambios de un archivo de unidad

Use el siguiente comando para revertir cualquier cambio que haya realizado en una unidad usando el comando de edición systemctl.

# systemctl revert unit

Agregar dependencia adicional a una Unidad

/etc/systemd/system/unit.d/newcustomdependency.conf
[Unit]
Requires=new customdependency
After=new customdependency

Administración de energía

Systemd proporciona diferentes comandos para reiniciar o apagar su sistema.

systemctl reboot     #shut down and reboot the system
systemctl poweroff   #shut down and power-off the system
systemctl suspend     #suspend the system
systemctl hibernate    #put the system into hibernation
systemctl hybrid-sleep   #put the system into hybrid-sleep state

Montar sistemas de archivos y particiones

systemd está a cargo de montar las particiones y los sistemas de archivos especificados en /etc/fstab. Puede administrar o montar un sistema de archivos definiendo todos los parámetros necesarios en un archivo de unidad. Incluya detalles del sistema de archivos y el punto de montaje. Systemd le brinda más flexibilidad al trabajar con unidades de montaje. Utiliza el archivo /etc/fstab para la configuración y el montaje del sistema de archivos. El proceso implica el uso de la herramienta systemd-fstab-generator para crear unidades de montaje a partir de los datos del archivo fstab.

Crear una unidad de montaje systemd

La ilustración está en Fedora 33 ejecutando un sistema de archivos btrfs.
Verifique que tenga espacio libre en el grupo de volúmenes.

# lsblk

Lista de archivos de unidades de montaje disponibles:

[root@foss]# systemctl list-unit-files -t mount
OR
[root@foss]# systemctl status *mount

Cree un archivo de unidad systemd .mount:

Verifique el UUID del sistema de archivos usando el comando blkid.

[root@foss]# blkid /dev/sda2
/dev/sda2: LABEL="fedoraworkstation33" UUID="688a6af2-xxx-4da4-xxx-878c5b0f063b" UUID_SUB="690a86e7-yyyy-9a92-4bc6-49cca4yyyy8df" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="0byyyb88-02"

Cree un nuevo archivo [var-lib-docker.mount] en el directorio etc/systemd/system. Agregue los datos de configuración a continuación. Tenga en cuenta que el nombre del archivo de la unidad y el punto de montaje deben ser idénticos.

# vi /etc/systemd/system/var-lib-docker.mount
[Unit]
Description=docker mount
[Mount]
What=/dev/disk/by-uuid/688a6af2-77e1-4da4-bc63-878c5b0f063b
Where=/var/lib/docker
Type=btrfs
Options=defaults
[Install]
WantedBy=multi-user.target

Tenga en cuenta que el argumento "qué" puede tomar UUID, ETIQUETA y ruta al disco.

La descripción en la sección [Unidad] proporciona el nombre del montaje, que se muestra con systemctl -t mount. Los datos de configuración en la sección [Mount] contienen los mismos datos en el archivo fstab.

Habilite la unidad de montaje para que se inicie después del arranque:

[root@foss]# systemctl enable var-lib-docker.mount
Created symlink /etc/systemd/system/multi-user.target.wants/var-lib-docker.mount → /etc/systemd/system/var-lib-docker.mount.

El comando crea un enlace simbólico en el directorio /etc/systemd/system, lo que permite montar la unidad de montaje en todos los arranques posteriores.

Inicie y monte el sistema de archivos:

# systemctl start var-lib-docker.mount

Verifique que el sistema de archivos se haya montado:

# systemctl status var-lib-docker.mount
● var-lib-docker.mount - Docker mount
Loaded: loaded (/etc/systemd/system/var-lib-docker.mount; enabled; vendor preset: disabled)
Active: inactive (dead)
Where: /var/lib/docker
What: /dev/disk/by-uuid/688a6af2-77e1-4da4-bc63-878c5b0f063b

También puede modificar el archivo de la unidad de servicio de la ventana acoplable para asegurarse de que el servicio solo se inicie después de llamar al servicio de montaje.

# cat /usr/lib/systemd/system/docker.service
[Unit]
Description=docker service unit file
After=network.target var-lib-docker.mount # Added mount unit for docker service to wait
Requires=docker.socket

Reinicie y verifique el estado de la unidad de servicio de montaje.

# systemctl reboot
# systemctl status var-lib-docker.mount

Compruebe el punto de montaje [var-lib-docker]:

# mount | grep var-lib-docker

Consejos y trucos

Ejecutar un servicio después de que la red esté activa

Puede retrasar el inicio de un servicio hasta que la red esté en funcionamiento agregando las siguientes dependencias a su archivo .service.

/etc/systemd/system/test_foo.service
[Unit]
Wants=network-online.target
After=network-online.target

Además, puede agregar nss-lookup.target si un servicio necesita realizar consultas de DNS.

/etc/systemd/system/test_foo.service
[Unit]
Wants=network-online.target
After=network-online.target nss-lookup.target
...

Use el siguiente comando para verificar qué servicio está extrayendo nss-lookup.target.

# systemctl list-dependencies --reverse nss-lookup.target

Instalar las herramientas de configuración de la GUI de systemd

También puede trabajar con systemd utilizando las siguientes herramientas GUI.

  • SystemdGenie:es una herramienta de administración de systemd basada en KDE.
  • Systemadm:es un navegador gráfico para unidades systemd.

optimizaciones de systemd

Systemd ofrece tiempos de arranque rápidos de <2 s para entornos de escritorio actualizados. Sin embargo, podríamos optimizarlo aún más sin tener que escribir ningún código con los siguientes pasos:

  •  Primero, considere omitir el initrd si usa uno en su sistema.
  • Considere deshabilitar SELinux y auditar agregando selinux=0 en la línea de comandos del kernel. Sin embargo, tenga en cuenta que los administradores de sistemas recomiendan dejar SElinux activado por razones de seguridad.
  • Considere desinstalar Syslog y utilice journal en su lugar. Journal es la herramienta de registro predeterminada en los sistemas systemd más nuevos.
  • Si la salida de su consola es lenta, use el indicador silencioso en la línea de comando y deshabilite el registro de depuración del sistema.
  • Considere eliminar cron y use temporizadores systemd en su lugar.
  • Utilice un entorno de escritorio moderno como GNOME 40 que no utiliza ConsoleKit.
  • Verifique y deshabilite cualquier proceso o servicio de arranque innecesario. El arranque del sistema se vuelve más rápido si inicia menos procesos en el arranque.
  • Deshágase de los servicios basados ​​en shell, como los scripts de inicio de SysV, y reemplácelos con archivos unitarios.
  • Evite usar Type=forking y ordenar dependencias. En su lugar, reemplácelos con activación de socket y Type=simple siempre que sea posible. Permitirá una puesta en marcha mejor paralelizada de los servicios.

Resolución de problemas

Investigar servicios fallidos

Use el siguiente comando para encontrar los servicios systemd que no pudieron iniciarse:

# systemctl --state=failed

Diagnóstico de un servicio

También puede obtener más información sobre la solución de problemas de un servicio configurando la variable de entorno SYSTEMD_LOG_LEVEL en depuración.
Por ejemplo, para ejecutar el demonio systemd-networkd en modo de depuración, agregue un archivo desplegable para el servicio y los siguientes configuraciones.

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

Alternativamente, puede configurar la variable de entorno manualmente con el siguiente comando:

# SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-networkd

Después de completar su configuración, reinicie el servicio y controle el diario del servicio con la opción -f/–follow para ver todos los registros.

Registros de Systemd

Los registros del sistema almacenan un historial de las actividades del sistema, como la hora de inicio, cuándo se iniciaron los servicios, los trabajos del sistema, los servicios en segundo plano, las actividades fallidas y mucho más. Systemd mantiene un "catálogo" de errores, mensajes, posibles soluciones y destaca contextos críticos en los mensajes de registro que podrían pasar desapercibidos. Puede revisar los registros de systemd con el comando journalctl.

$ journalctl --pager-end

La marca –pager-end inicia la revisión de su registro al final de la salida de journalctl.

Recursos adicionales

  1. Página de manual de Systemd.unit.
  2. Guía de sistemas del proyecto Fedora.
  3. Descripción de systemd de Freedesktop.org.
  4. Systemd ArchWiki.

Conclusión

systemd proporciona una forma robusta de administrar el inicio de Linux con unidades systemd. El artículo ha resaltado diferentes formas de usar el comando systemctl para editar archivos de unidades, administrar unidades systemd. Ha resaltado cómo crear una nueva unidad de montaje systemd para montar un nuevo sistema de archivos y permitir que se inicie durante el inicio. Finalmente, he compartido algunos consejos de optimización de systemd y cómo solucionar problemas de servicios fallidos.


Linux
  1. Una breve introducción a las unidades de camino

  2. Cómo usar el comando Systemctl para administrar los servicios de Systemd

  3. Cómo crear un servicio Systemd en Linux

  4. Cómo administrar una partición de intercambio en Linux

  5. Cómo eliminar los servicios de systemd

Comandos Systemctl para administrar el servicio Systemd

Cómo ejecutar un script al arrancar en Debian 11

Cómo borrar los registros de diario de Systemd

Cómo administrar bases de datos en MariaDB en Ubuntu 18.04

CentOS / RHEL 7:Guía para principiantes de unidades de servicio systemd

Cómo detener el servicio systemd