Iniciar, detener y reiniciar un servicio con systemctl
En este paso, aprenderá a gestionar el ciclo de vida de los servicios del sistema utilizando los comandos systemctl. Practicará el inicio, la detención y el reinicio de un servicio. Para este ejercicio, utilizaremos un servicio ficticio que crearemos. Este enfoque garantiza que podamos manipular un servicio de forma segura sin afectar las funciones críticas del sistema.
Primero, creemos un archivo de unidad de servicio simple. Este archivo definirá un servicio que simplemente escribe una marca de tiempo en un archivo de registro cada pocos segundos.
Cree un nuevo archivo de unidad de servicio llamado mytest.service directamente en el directorio del sistema systemd usando nano:
sudo nano /etc/systemd/system/mytest.service
Pegue el siguiente contenido en el editor nano:
[Unit]
Description=My Test Service
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c 'while true; do echo "$(date): My Test Service is running." >> /tmp/mytest.log; sleep 5; done'
ExecStop=/bin/bash -c 'echo "$(date): My Test Service stopped." >> /tmp/mytest.log'
Restart=on-failure
[Install]
WantedBy=multi-user.target
[Unit]: Contiene información genérica sobre la unidad. Description proporciona un nombre legible por humanos, y After=network.target especifica que este servicio debe iniciarse después de que la red esté activa.
[Service]: Define el comportamiento del servicio.
Type=simple: Indica un tipo de servicio simple donde el comando ExecStart es el proceso principal.
ExecStart: El comando a ejecutar cuando el servicio se inicia. Aquí, es un bucle bash que escribe un mensaje con marca de tiempo en /tmp/mytest.log cada 5 segundos.
ExecStop: El comando a ejecutar cuando el servicio se detiene. Escribe un mensaje de detención en el registro.
Restart=on-failure: Configura el servicio para que se reinicie si sale con un estado distinto de cero.
[Install]: Contiene información sobre cómo se debe instalar el servicio. WantedBy=multi-user.target significa que este servicio debe iniciarse cuando el sistema alcance el nivel de ejecución multiusuario.
Guarde el archivo presionando Ctrl+X, luego Y para confirmar, y Enter para guardar el archivo.
Ahora, recargue el demonio systemd para que reconozca el nuevo archivo de servicio:
sudo systemctl daemon-reload
Inicio de un Servicio
Para iniciar un servicio, use el comando systemctl start.
Ejecute el siguiente comando para iniciar mytest.service. Tenga en cuenta que necesitamos usar sudo porque las operaciones de systemctl generalmente requieren privilegios de root.
sudo systemctl start mytest.service
No habrá una salida inmediata si el comando es exitoso.
Ahora, verifique que el servicio se está ejecutando comprobando su estado:
systemctl status mytest.service
Debería ver una salida que indique que el servicio está active (running):
● mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: active (running) since ...
Main PID: ... (bash)
Tasks: 2 (limit: ...)
Memory: ...
CPU: ...
CGroup: /system.slice/mytest.service
├─... /bin/bash -c "while true; do echo \"\$(date): My Test Service is running.\" >> /tmp/mytest.log; sleep 5; done"
└─... sleep 5
...output omitted...
También puede comprobar el archivo de registro para ver si el servicio está escribiendo mensajes:
tail -f /tmp/mytest.log
Debería ver que aparecen nuevas líneas cada 5 segundos, similar a esto:
Tue Jul 22 09:15:09 AM CST 2025: My Test Service is running.
Tue Jul 22 09:15:14 AM CST 2025: My Test Service is running.
Presione Ctrl+C para salir de tail.
Detención de un Servicio
Para detener un servicio en ejecución, use el comando systemctl stop.
Ejecute el siguiente comando para detener mytest.service:
sudo systemctl stop mytest.service
Nuevamente, no habrá una salida inmediata.
Verifique que el servicio se ha detenido:
systemctl status mytest.service
La salida ahora debería mostrar Active: inactive (dead):
○ mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: inactive (dead) since ...
...output omitted...
Compruebe nuevamente el archivo de registro /tmp/mytest.log. Debería ver el mensaje "My Test Service stopped." y no aparecerán nuevos mensajes de "running".
tail /tmp/mytest.log
La salida se verá similar a esto:
Tue Jul 22 09:15:24 AM CST 2025: My Test Service is running.
Tue Jul 22 09:15:28 AM CST 2025: My Test Service stopped.
Reinicio de un Servicio
Para reiniciar un servicio, use el comando systemctl restart. Este comando primero detiene el servicio y luego lo inicia de nuevo. Esto es útil cuando ha realizado cambios en la configuración de un servicio y necesita que surtan efecto.
Ejecute el siguiente comando para reiniciar mytest.service:
sudo systemctl restart mytest.service
Verifique que el servicio se está ejecutando nuevamente:
systemctl status mytest.service
Debería ver Active: active (running) nuevamente, y el Main PID probablemente será un número nuevo, lo que indica que se ha iniciado un nuevo proceso.
● mytest.service - My Test Service
Loaded: loaded (/etc/systemd/system/mytest.service; disabled; preset: disabled)
Active: active (running) since ...
Main PID: ... (bash)
Tasks: 2 (limit: ...)
Memory: ...
CPU: ...
CGroup: /system.slice/mytest.service
├─... /bin/bash -c "while true; do echo \"\$(date): My Test Service is running.\" >> /tmp/mytest.log; sleep 5; done"
└─... sleep 5
...output omitted...
Compruebe el archivo de registro /tmp/mytest.log para confirmar que el servicio ha reanudado la escritura de mensajes de "running".
tail -f /tmp/mytest.log
Debería ver un mensaje de "stopped" seguido de nuevos mensajes de "running":
Tue Jul 22 09:15:28 AM CST 2025: My Test Service stopped.
Tue Jul 22 09:15:40 AM CST 2025: My Test Service is running.
Presione Ctrl+C para salir de tail.