Conceptos esenciales de Systemd: Trabajar con servicios, unidades y el registro

Introducción

En los últimos años, las distribuciones de Linux han transitado cada vez más de otros sistemas init a systemd. La suite de herramientas systemd proporciona un modelo de inicio rápido y flexible para administrar una máquina entera desde el arranque en adelante.

En esta guía, te daremos un breve recorrido por los comandos más importantes que querrás conocer para administrar un servidor habilitado para systemd. Estos deberían funcionar en cualquier servidor que implemente systemd (cualquier versión de SO en o superior a Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Empecemos.

Administración Básica de Unidades

El objeto básico que systemd administra y actúa sobre es una “unidad”. Las unidades pueden ser de muchos tipos, pero el tipo más común es un “servicio” (indicado por un archivo de unidad que termina en .service). Para administrar servicios en un servidor habilitado para systemd, nuestra principal herramienta es el comando systemctl.

Todos los comandos normales del sistema init tienen acciones equivalentes con el comando systemctl. Utilizaremos la unidad nginx.service para demostrarlo (tendrás que instalar Nginx con tu administrador de paquetes para obtener este archivo de servicio).

Por ejemplo, podemos iniciar el servicio escribiendo:

  1. sudo systemctl start nginx.service

Podemos detenerlo nuevamente escribiendo:

  1. sudo systemctl stop nginx.service

Para reiniciar el servicio, podemos escribir:

  1. sudo systemctl restart nginx.service

Para intentar recargar el servicio sin interrumpir la funcionalidad normal, podemos escribir:

  1. sudo systemctl reload nginx.service

Activar o Desactivar Unidades

Por defecto, la mayoría de los archivos de unidad de systemd no se inician automáticamente en el arranque. Para configurar esta funcionalidad, es necesario “habilitar” la unidad. Esto la conecta a un determinado “objetivo” de arranque, lo que provoca que se active cuando se inicia ese objetivo.

Para habilitar un servicio para que se inicie automáticamente en el arranque, escriba:

  1. sudo systemctl enable nginx.service

Si desea desactivar nuevamente el servicio, escriba:

  1. sudo systemctl disable nginx.service

Obteniendo una Visión General del Estado del Sistema

Hay una gran cantidad de información que podemos obtener de un servidor systemd para obtener una visión general del estado del sistema.

Por ejemplo, para obtener todos los archivos de unidad que systemd ha listado como “activos”, escriba (en realidad puede omitir el list-units ya que este es el comportamiento predeterminado de systemctl):

  1. systemctl list-units

Para listar todas las unidades que systemd ha cargado o intentado cargar en memoria, incluyendo aquellas que no están actualmente activas, añade el interruptor --all:

  1. systemctl list-units --all

Para listar todas las unidades instaladas en el sistema, incluyendo aquellas que systemd no ha intentado cargar en memoria, escribe:

  1. systemctl list-unit-files

Visualización de Información Básica de los Registros

A systemd component called journald collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.

Para ver todas las entradas de registros, comenzando por la entrada más antigua, escribe:

  1. journalctl

Por defecto, esto te mostrará entradas de los arranques actual y anterior si journald está configurado para guardar registros de arranques anteriores. Algunas distribuciones habilitan esto por defecto, mientras que otras no (para habilitarlo, edita el archivo /etc/systemd/journald.conf y establece la opción Storage= en “persistent”, o crea el directorio persistente escribiendo sudo mkdir -p /var/log/journal).

Si solo deseas ver las entradas del diario del arranque actual, añade la bandera -b:

  1. journalctl -b

Para ver solo los mensajes del kernel, como los que típicamente representa dmesg, puedes usar la bandera -k:

  1. journalctl -k

De nuevo, puedes limitar esto solo al arranque actual añadiendo la bandera -b:

  1. journalctl -k -b

Consulta de Estados de Unidades y Registros

Mientras que los comandos anteriores te dieron acceso al estado general del sistema, también puedes obtener información sobre el estado de unidades individuales.

Para ver un resumen del estado actual de una unidad, puedes usar la opción status con el comando systemctl. Esto te mostrará si la unidad está activa, información sobre el proceso y las últimas entradas del diario:

  1. systemctl status nginx.service

Para ver todas las entradas del diario para la unidad en cuestión, proporciona la opción -u con el nombre de la unidad al comando journalctl:

  1. journalctl -u nginx.service

Como siempre, puedes limitar las entradas al arranque actual agregando la bandera -b:

  1. journalctl -b -u nginx.service

Inspeccionando Unidades y Archivos de Unidad

En este momento, sabes cómo modificar el estado de una unidad iniciándola o deteniéndola, y sabes cómo ver información de estado y diario para tener una idea de lo que está sucediendo con el proceso. Sin embargo, aún no hemos visto cómo inspeccionar otros aspectos de las unidades y archivos de unidad.

A unit file contains the parameters that systemd uses to manage and run a unit. To see the full contents of a unit file, type:

  1. systemctl cat nginx.service

Para ver el árbol de dependencias de una unidad (qué unidades intentará activar systemd al iniciar la unidad), escribe:

  1. systemctl list-dependencies nginx.service

Esto mostrará las unidades dependientes, con las unidades target expandidas de manera recursiva. Para expandir todas las unidades dependientes de forma recursiva, pasa la bandera --all:

  1. systemctl list-dependencies --all nginx.service

Finalmente, para ver los detalles de bajo nivel de la configuración de la unidad en el sistema, puedes usar la opción show:

  1. systemctl show nginx.service

Esto te dará el valor de cada parámetro que está siendo gestionado por systemd.

Modificación de Archivos de Unidad

Si necesitas hacer una modificación a un archivo de unidad, systemd te permite hacer cambios desde el propio comando systemctl para que no tengas que ir a la ubicación real del disco.

Para agregar un fragmento de archivo de unidad, que se puede usar para añadir o sobrescribir configuraciones en el archivo de unidad predeterminado, simplemente llama a la opción edit en la unidad:

  1. sudo systemctl edit nginx.service

Si prefieres modificar todo el contenido del archivo de unidad en lugar de crear un fragmento, pasa la bandera --full:

  1. sudo systemctl edit --full nginx.service

Después de modificar un archivo de unidad, debes recargar el proceso de systemd para que recoja tus cambios:

  1. sudo systemctl daemon-reload

Uso de Targets (Niveles de ejecución)

Otra función de un sistema init es transicionar el servidor mismo entre diferentes estados. Los sistemas init tradicionales típicamente se refieren a estos como “niveles de ejecución”, permitiendo que el sistema esté solo en un nivel de ejecución en cualquier momento.

En systemd, en cambio, se utilizan “targets”. Los targets son básicamente puntos de sincronización que el servidor puede usar para llevarlo a un estado específico. Los archivos de servicio y otras unidades pueden estar vinculados a un target y múltiples targets pueden estar activos al mismo tiempo.

Para ver todos los targets disponibles en su sistema, escriba:

  1. systemctl list-unit-files --type=target

Para ver el target predeterminado que systemd intenta alcanzar al arrancar (lo que a su vez inicia todos los archivos de unidad que componen el árbol de dependencias de ese target), escriba:

  1. systemctl get-default

Puede cambiar el target predeterminado que se utilizará al arrancar usando la opción set-default:

  1. sudo systemctl set-default multi-user.target

Para ver qué unidades están vinculadas a un target, puede escribir:

  1. systemctl list-dependencies multi-user.target

Puede modificar el estado del sistema para transicionar entre targets con la opción isolate. Esto detendrá cualquier unidad que no esté vinculada al target especificado. Asegúrese de que el target que está aislado no detenga ningún servicio esencial:

  1. sudo systemctl isolate multi-user.target

Deteniendo o Reiniciando el Servidor

Para algunos de los estados principales a los que puede transicionar un sistema, hay atajos disponibles. Por ejemplo, para apagar su servidor, puede escribir:

  1. sudo systemctl poweroff

Si deseas reiniciar el sistema en su lugar, eso se puede lograr escribiendo:

  1. sudo systemctl reboot

Puedes arrancar en modo de rescate escribiendo:

  1. sudo systemctl rescue

Ten en cuenta que la mayoría de los sistemas operativos incluyen alias tradicionales para estas operaciones, de modo que simplemente puedes escribir sudo poweroff o sudo reboot sin el systemctl. Sin embargo, esto no está garantizado en todos los sistemas.

Siguientes Pasos

Para este punto, deberías conocer los conceptos básicos de cómo administrar un servidor que utiliza systemd. Sin embargo, hay mucho más por aprender a medida que tus necesidades se expanden. A continuación, se presentan enlaces a guías con información más detallada sobre algunos de los componentes que discutimos en esta guía:

Al aprender a aprovechar las fortalezas de tu sistema de inicio, puedes controlar el estado de tus máquinas y gestionar más fácilmente tus servicios y procesos.

Source:
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal