Cómo reiniciar automáticamente un servicio fallido en Linux

En un sistema Linux, los servicios (también llamados demonios) desempeñan un papel crítico en la gestión de diversas tareas como alojamiento web, gestión de bases de datos y redes. Sin embargo, los servicios pueden a veces fallar o detenerse debido a errores, alto uso de recursos o fallos inesperados del sistema.

Para prevenir el tiempo de inactividad y asegurar operaciones fluidas, los administradores del sistema pueden configurar los servicios para que se reinicien automáticamente cada vez que fallen, lo cual es especialmente útil para servidores web (Apache, Nginx), bases de datos (MySQL, PostgreSQL) u otras aplicaciones críticas que deben estar disponibles en todo momento.

En esta guía, explicaremos cómo usar systemd para configurar un servicio de Linux para que se reinicie automáticamente si se detiene.

¿Por qué reiniciar un servicio automáticamente?

Hay varias razones por las cuales podrías querer reiniciar automáticamente un servicio en Linux:

  • Minimizar el tiempo de inactividad: Si un servicio se detiene inesperadamente, los reinicios automáticos aseguran que los usuarios experimenten una mínima interrupción.
  • Mejorar la fiabilidad: Servicios como servidores web, bases de datos y procesos en segundo plano deben estar siempre en funcionamiento.
  • Reducir el trabajo manual: Sin automatización, tendrías que verificar los servicios con frecuencia y reiniciarlos manualmente si fallan.
  • Manejar fallos inesperados: Si un servicio se bloquea debido a errores de software, límites de recursos o errores del sistema, systemd puede reiniciarlo sin intervención del administrador.

Ahora, revisemos los pasos para configurar reinicios automáticos usando systemd.

Paso 1: Identificar el servicio que deseas reiniciar

Antes de hacer cambios, necesitas conocer el nombre exacto del servicio que deseas configurar mediante listando todos los servicios en ejecución.

systemctl list-units --type=service --state=running
List Running Linux Services

Si ya conoces el nombre del servicio, puedes verificar su estado.

systemctl status apache2
Check Running Service Status

Reemplaza apache2 con el nombre real del servicio que deseas gestionar.

Paso 2: Editar la configuración del servicio

Systemd te permite modificar el comportamiento del servicio usando archivos de configuración personalizados. En lugar de modificar la configuración a nivel del sistema (que puede ser sobrescrita durante las actualizaciones), usaremos systemctl edit para crear un archivo de sobreescritura.

Ejecuta el siguiente comando:

systemctl edit apache2

Esto abrirá un archivo en blanco en tu editor de texto predeterminado.

Si el archivo no está vacío, verás configuraciones existentes que puedes modificar. De lo contrario, necesitarás agregar la configuración de reinicio necesaria.

Open Systemd Service Configuration File

Paso 3: Agregar configuración de reinicio de Systemd

En el editor, agrega las siguientes líneas.

[Service]
Restart=always
RestartSec=5s

Explicación de estas configuraciones:

  • Restart=always – Asegura que el servicio se reinicie cada vez que se detiene, sin importar la razón.
  • RestartSec=5s – Indica a systemd que espere 5 segundos antes de reiniciar el servicio, lo que puede prevenir bucles de reinicio rápidos en caso de fallos repetidos.

Una vez añadido, guarda y cierra el archivo.

Add Service Restart Configuration

Después de realizar cambios en un servicio de systemd, necesitas recargar systemd y reiniciar el servicio para asegurarte de que la nueva configuración se aplique:

sudo systemctl daemon-reload
sudo systemctl restart apache2

Para confirmar que el servicio ahora está configurado para reiniciarse automáticamente, ejecuta:

sudo systemctl show apache2 | grep Restart

Si todo está configurado correctamente, deberías ver:

Restart=always

Paso 4: Prueba el Reinicio Automático en Linux

Para asegurarte de que la configuración funciona, puedes detener manualmente el servicio y verificar si se reinicia.

sudo systemctl stop apache2

Espera 5 segundos y luego verifica su estado.

sudo systemctl status apache2

¡Si el servicio está funcionando de nuevo, el reinicio automático está funcionando!

Opciones Adicionales de Reinicio

Dependiendo de tus necesidades, systemd proporciona diferentes políticas de reinicio:

  • Restart=always – El servicio siempre se reinicia, incluso si se detuvo manualmente.
  • Restart=on-failure – Se reinicia solo si el servicio sale con un error (pero no si se detiene manualmente).
  • Restart=on-abnormal – Reinicia el servicio si se bloquea debido a una señal (como un fallo de segmentación).
  • Restart=on-watchdog – Reinicia el servicio si se agota el tiempo de espera mientras se está ejecutando.

Puedes reemplazar Restart=always con cualquiera de estas opciones según tus necesidades.

Cómo verificar registros de servicios en busca de problemas

Si un servicio sigue fallando, es una buena idea verificar los registros utilizando el comando journalctl, que mostrará los registros del servicio de los últimos 10 minutos.

journalctl -u apache2 --since "10 minutes ago"

Para ver un flujo de registro en tiempo real, usa:

journalctl -u apache2 -f
Conclusión

Configurar reinicios automáticos para servicios que fallan asegura que las aplicaciones críticas sigan funcionando sin intervención manual. Al utilizar las opciones de reinicio de systemd, puedes minimizar el tiempo de inactividad, mejorar la estabilidad del sistema y reducir la necesidad de solución de problemas manuales.

Source:
https://www.tecmint.com/automatically-restart-service-linux/