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.



