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