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.



