Gestión de servicios y registros del sistema

LinuxBeginner
Practicar Ahora

Introducción

Un proceso es un programa en ejecución. Un servicio es una función del sistema de larga duración que se administra conforme a una definición y una política de ciclo de vida. En Ubuntu, systemd lee las definiciones de las unidades, inicia y detiene los servicios, realiza un seguimiento de sus estados y registra su salida en el journal del sistema.

En este laboratorio utilizarás el servicio de práctica aislado labex-heartbeat. Inspeccionarás su unidad, controlarás su estado de ejecución, configurarás su habilitación durante el arranque, consultarás el journal y los registros de texto tradicionales, seguirás la salida en tiempo real, diagnosticarás un fallo controlado y restablecerás su funcionamiento normal. No editarás archivos de unidades ni modificarás el servicio SSH.

Reconocer systemd y las unidades de servicio

En este paso confirmarás que systemd está disponible y distinguirás entre las unidades en ejecución y los archivos de unidades instalados.

Accede al espacio de trabajo del laboratorio:

cd /home/labex/project/service-lab

Muestra la versión de systemd. La primera línea es suficiente para identificarla:

systemctl --version | head -n 1

Consulta el estado general de systemd:

systemctl is-system-running || true

running indica que todas las unidades necesarias funcionan correctamente. Una máquina virtual de formación puede mostrar degraded porque una unidad opcional no relacionada ha fallado; aun así, el comando demuestra que systemd responde.

Enumera una muestra de los servicios que se están ejecutando actualmente:

systemctl list-units --type=service --state=running --no-pager | head -n 12

Una unidad es un objeto administrado por systemd. Las unidades de servicio terminan en .service. Los archivos de unidades describen qué elementos se pueden administrar, aunque no estén ejecutándose en ese momento:

systemctl list-unit-files --type=service --no-pager | head -n 12

Guarda un resumen compacto de systemd. La sustitución de comandos $(...) inserta la salida de un comando en el texto que escribe printf:

printf 'systemd=%s\nstate=%s\n' "$(systemctl --version | head -n 1)" "$(systemctl is-system-running)" > systemd-summary.txt
cat systemd-summary.txt

Inspeccionar la definición y el estado de un servicio

En este paso inspeccionarás el servicio de práctica preparado antes de iniciarlo.

systemctl status combina la ruta de la unidad cargada, la habilitación, el estado de ejecución, la información del proceso y las líneas de registro más recientes:

cd /home/labex/project/service-lab
systemctl status labex-heartbeat.service --no-pager

El servicio debería aparecer como inactive (dead) y disabled. Inactivo significa que no se está ejecutando actualmente; deshabilitado significa que no está configurado para iniciarse durante el arranque mediante su destino de instalación. Son propiedades independientes.

Muestra la definición de la unidad:

systemctl cat labex-heartbeat.service

La sección [Unit] describe la identidad y el orden de inicio, [Service] define el proceso y [Install] describe la habilitación. Solo inspeccionarás esta unidad preparada; no es necesario que escribas una.

Utiliza systemctl show para consultar propiedades en un formato legible por máquinas:

systemctl show labex-heartbeat.service -p LoadState -p ActiveState -p SubState -p UnitFileState

Guarda esas propiedades para verificarlas:

systemctl show labex-heartbeat.service -p LoadState -p ActiveState -p SubState -p UnitFileState > service-properties.txt
cat service-properties.txt

Iniciar, detener y reiniciar un servicio

En este paso cambiarás el estado de ejecución del servicio de práctica y confirmarás cada resultado.

Para iniciar y detener servicios del sistema se necesitan privilegios elevados. Inicia el servicio:

sudo systemctl start labex-heartbeat.service

Comprueba el estado activo de forma concisa:

systemctl is-active labex-heartbeat.service

La salida esperada es active. Consulta el estado completo:

systemctl status labex-heartbeat.service --no-pager

Ahora el estado incluirá un PID principal. Detén el servicio e inspecciona el resultado:

sudo systemctl stop labex-heartbeat.service
systemctl is-active labex-heartbeat.service || true

El estado esperado es inactive. Inícialo de nuevo y utiliza después restart para reemplazar el proceso en ejecución en una sola operación:

sudo systemctl start labex-heartbeat.service
sudo systemctl restart labex-heartbeat.service
systemctl show labex-heartbeat.service -p ActiveState -p SubState -p MainPID

Al finalizar este paso, el servicio debería mostrar ActiveState=active y SubState=running.

Configurar la habilitación durante el arranque

En este paso distinguirás entre el estado de ejecución actual de un servicio y su habilitación para futuros arranques.

El servicio está activo desde el paso anterior, pero la configuración inicial dejó deshabilitado su archivo de unidad. Comprueba la habilitación:

systemctl is-enabled labex-heartbeat.service || true

Habilita el servicio:

sudo systemctl enable labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service

La habilitación crea enlaces que conectan el servicio con un destino de arranque. No es necesario reiniciar un servicio que ya está en ejecución.

Practica la eliminación de esos enlaces de arranque:

sudo systemctl disable labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service || true

El servicio puede seguir activo aunque la salida ahora sea disabled. Vuelve a habilitarlo para dejar el laboratorio en su estado final:

sudo systemctl enable labex-heartbeat.service

Confirma ambas propiedades independientes:

systemctl is-active labex-heartbeat.service
systemctl is-enabled labex-heartbeat.service

Consultar los registros del servicio con journalctl

En este paso leerás la salida reciente del servicio desde el journal de systemd y guardarás una instantánea centrada en él.

Normalmente, los servicios administrados por systemd envían la salida estándar y el error estándar al journal. Consulta únicamente la unidad de práctica:

sudo journalctl -u labex-heartbeat.service -n 10 --no-pager

La opción -u selecciona una unidad, -n 10 conserva los diez registros más recientes y --no-pager los muestra directamente. Deberías ver el mensaje de inicio del servicio y los registros de actividad periódica.

Limita los resultados a un intervalo de tiempo reciente:

sudo journalctl -u labex-heartbeat.service --since "5 minutes ago" --no-pager

Filtra por prioridad de advertencia o superior. No obtener ninguna salida es un resultado correcto y saludable cuando el servicio no ha registrado advertencias:

sudo journalctl -u labex-heartbeat.service -p warning --since "5 minutes ago" --no-pager

Guarda una instantánea reciente específica de la unidad en el espacio de trabajo del proyecto:

cd /home/labex/project/service-lab
sudo journalctl -u labex-heartbeat.service -n 20 --no-pager > service-journal.txt
tail -n 5 service-journal.txt

Seguir un registro de texto tradicional

En este paso inspeccionarás /var/log y seguirás un registro de texto mientras llegan nuevos registros.

La jerarquía /var/log almacena numerosos registros tradicionales del sistema y de las aplicaciones. Enumera una pequeña muestra:

ls -lh /var/log | head -n 12

Lee los registros más recientes del servicio de práctica:

tail -n 5 /var/log/labex-heartbeat.log

La opción -f sigue un archivo y muestra las líneas nuevas a medida que otro proceso las añade:

tail -f /var/log/labex-heartbeat.log

Espera hasta ver al menos dos nuevas líneas de actividad periódica y pulsa Ctrl+C. Esto interrumpe tail, pero no detiene el servicio que escribe el registro.

Filtra las líneas de actividad y muestra las tres más recientes:

grep '^heartbeat ' /var/log/labex-heartbeat.log | tail -n 3

Guarda una muestra de cinco líneas en el espacio de trabajo del proyecto:

cd /home/labex/project/service-lab
tail -n 5 /var/log/labex-heartbeat.log > traditional-log-sample.txt
cat traditional-log-sample.txt

Diagnosticar y recuperar un servicio fallido

En este paso crearás un fallo de configuración controlado, utilizarás el estado del servicio y los registros para identificarlo y restablecerás el funcionamiento normal.

Detén el servicio de práctica y crea una copia de seguridad de su configuración sencilla:

sudo systemctl stop labex-heartbeat.service
sudo cp /etc/labex-heartbeat.conf /etc/labex-heartbeat.conf.bak

Sustituye el intervalo numérico por un valor no válido. Esto interrumpirá intencionadamente solo el servicio de práctica:

sudo sed -i 's/^INTERVAL=2$/INTERVAL=invalid/' /etc/labex-heartbeat.conf

Intenta iniciar el servicio. Se espera que aparezca un mensaje de error:

sudo systemctl start labex-heartbeat.service || true

Inspecciona el estado fallido:

systemctl status labex-heartbeat.service --no-pager || true
systemctl is-failed labex-heartbeat.service

El estado indica que el proceso terminó, pero el journal proporciona la causa específica de la aplicación:

sudo journalctl -u labex-heartbeat.service -n 10 --no-pager

Busca configuration error: INTERVAL must be a positive integer. Restaura la configuración válida, borra el estado de fallo registrado e inicia de nuevo el servicio:

sudo mv /etc/labex-heartbeat.conf.bak /etc/labex-heartbeat.conf
sudo systemctl reset-failed labex-heartbeat.service
sudo systemctl start labex-heartbeat.service

Confirma la recuperación:

systemctl is-active labex-heartbeat.service
cat /etc/labex-heartbeat.conf

El servicio debería estar active y la configuración debería contener de nuevo INTERVAL=2.

Resumen

Has distinguido entre procesos, servicios, estado activo y habilitación durante el arranque. Has inspeccionado una unidad de systemd, controlado un servicio de práctica seguro mediante systemctl y consultado sus registros con journalctl.

También has inspeccionado /var/log, seguido la salida de texto en tiempo real con tail -f, utilizado conjuntamente el estado y los registros para explicar un fallo controlado y restaurado el servicio. Este flujo de trabajo, que parte del estado y continúa con los registros, constituye una base práctica para resolver problemas de servicios en Linux.