Administració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 según 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á el servicio de práctica aislado labex-heartbeat. Inspeccionará su unidad, controlará su estado de ejecución, configurará la habilitación durante el arranque, consultará el journal y los registros de texto tradicionales, seguirá la salida en tiempo real, diagnosticará un fallo controlado y restaurará el funcionamiento correcto. No editará archivos de unidad ni modificará el servicio SSH.

Reconocer systemd y las unidades de servicio

En este paso, comprobará que systemd está disponible y distinguirá las unidades en ejecución de los archivos de unidad instalados.

Acceda al espacio de trabajo del laboratorio:

cd /home/labex/project/service-lab

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

systemctl --version | head -n 1

Solicite a systemd su estado general:

systemctl is-system-running || true

running significa 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 está respondiendo.

Muestre 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 unidad describen lo que se puede administrar, aunque no se esté ejecutando en ese momento:

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

Guarde 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á 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 debe aparecer como inactive (dead) y disabled. Inactive significa que no se está ejecutando actualmente; disabled significa que no está configurado para iniciarse mediante su destino de instalación durante el arranque. Son propiedades independientes.

Muestre la definición de la unidad:

systemctl cat labex-heartbeat.service

La sección [Unit] describe la identidad y el orden; [Service] define el proceso; y [Install] describe la habilitación. Solo inspeccionará esta unidad preparada; no necesita crear ninguna.

Use 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

Guarde 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á el estado de ejecución del servicio de práctica y confirmará cada resultado.

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

sudo systemctl start labex-heartbeat.service

Compruebe el estado activo de forma concisa:

systemctl is-active labex-heartbeat.service

La salida esperada es active. Consulte el estado completo:

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

Ahora el estado debe incluir un PID principal. Detenga el servicio e inspeccione el resultado:

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

El estado esperado es inactive. Inícielo de nuevo y, a continuación, use 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 debe tener ActiveState=active y SubState=running.

Configurar la habilitación durante el arranque

En este paso, distinguirá entre el estado de ejecución actual de un servicio y si está habilitado para futuros arranques.

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

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

Habilite 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.

Practique 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. Vuelva a habilitarlo para dejar el laboratorio en su estado final:

sudo systemctl enable labex-heartbeat.service

Confirme 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á la salida reciente del servicio desde el journal de systemd y guardará una instantánea específica.

Los servicios administrados por systemd normalmente envían la salida estándar y el error estándar al journal. Consulte ú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ía ver registros recientes de heartbeat. El mensaje de inicio puede haber quedado fuera de esta vista limitada mientras el servicio continuaba ejecutándose.

Limite los resultados a un intervalo de tiempo reciente:

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

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

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

Guarde una instantánea reciente y 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á /var/log y seguirá un registro de texto mientras llegan nuevos registros.

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

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

Lea 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

Espere hasta ver al menos dos líneas nuevas de heartbeat y, después, pulse Ctrl+C. Esto interrumpe tail, pero no detiene el servicio que escribe el registro.

Filtre las líneas de heartbeat y muestre las tres más recientes:

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

Guarde 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á un fallo de configuración controlado, utilizará el estado del servicio y los registros para identificarlo y restaurará el funcionamiento correcto.

Detenga el servicio de práctica y haga 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

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

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

Intente iniciar el servicio. Es esperable que aparezca un mensaje de fallo:

sudo systemctl start labex-heartbeat.service || true

Inspeccione 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 el motivo específico de la aplicación:

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

Busque configuration error: INTERVAL must be a positive integer. Restaure la configuración válida conocida, borre el estado de fallo registrado e inicie 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

Confirme la recuperación:

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

El servicio debe aparecer como active y la configuración debe volver a contener INTERVAL=2.

Resumen

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

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