GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo reiniciar automáticamente un servicio en caso de falla en Linux

Solución 1:

Solo respondiendo la parte de reinicio del servicio. También me encontré con Monit, pero en CentOS 7 systemd se encarga de todo eso por ti. Solo necesita agregar estas dos líneas al archivo .service (si aún no están allí):

Restart=always
RestartSec=3

Consulte https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ como referencia.

Si desea crear un servicio systemd personalizado, es bastante sencillo escribir su propio archivo de servicio. Vea el ejemplo a continuación, para un servidor http personalizado.

Inicie el editor con un nuevo archivo de servicio:

vim /etc/systemd/system/httpd.service

Y agregue el siguiente contenido, que puede editar según sea necesario:

[Unit]
Description=My httpd Service
After=network.target

[Service]
Type=simple
User=root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PERLLIB=/perl
ExecStart=/bin/httpd /etc/httpd.conf
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Quiero que se inicie automáticamente al arrancar:

systemctl enable httpd

Informe a systemd sobre los cambios e inicie el servicio:

systemctl daemon-reload
systemctl start httpd

Y ahora puedes ver el estado:

systemctl status httpd

Para referencia, consulte https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/

Solución 2:

monit es una excelente manera de monitorear y reiniciar los servicios cuando fallan, y probablemente terminará usándolo para otros servicios esenciales (como Apache). Hay un buen artículo sobre nixCraft que detalla cómo usar esto específicamente para servicios, aunque monit tiene muchas más funciones además de esta.

En cuanto al aspecto del socket, @galraen respondió este lugar.

Solución 3:

Puedes llamar al setsockopt(2) para enchufe de escucha con SO_REUSEADDR , por lo que podrá bind(2) de nuevo sin esperar a que caduquen todas las conexiones. Otra posibilidad:descartar conexiones del núcleo. FreeBSD tiene tcpdrop comando para esto, no sé nada de Linux.

Solución 4:

Si su distribución de Linux usa Upstart en lugar de SysV init, entonces el respawn la palabra clave hace esto.

http://upstart.ubuntu.com/libro de cocina/#respawn


Linux
  1. Cómo crear un servicio Systemd en Linux

  2. ¿Cómo usar el programa de vigilancia del software de Linux?

  3. Cómo abrir puerto en Linux

  4. ¿Cómo reiniciar el servidor MySQL remoto que se ejecuta en Ubuntu Linux?

  5. ¿Cómo reiniciar automáticamente un proceso en segundo plano de Linux si falla?

Cómo reiniciar los servicios de red en Linux

Cómo reiniciar Bluetooth en Ubuntu 20.04

Cómo reiniciar un servicio a través de systemctl bajo Linux

Cómo usar systemctl en Linux

¿Cómo vaciar la caché de DNS en Linux?

Cómo iniciar, detener o reiniciar servicios de red en Rocky Linux 8