En Windows, puede configurar lo que debería suceder si / cuando falla un servicio. ¿Existe una forma estándar de lograr lo mismo en Linux (CentOS en particular)?
Una gran parte de mi pregunta es: ¿cómo maneja los sockets que se han dejado abiertos? Por ejemplo, en los estados TIME_WAIT, FIN_WAIT1, etc.
En este momento, si el servicio que estoy desarrollando se bloquea, tengo que esperar a que los sockets se borren o cambien el puerto de escucha antes de poder reiniciarlo manualmente.
Gracias por tu ayuda.
Solo responde a 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í):
Ver https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ para referencia.
Si desea crear un servicio systemd personalizado, es bastante sencillo escribir su propio archivo de servicio. Vea el siguiente ejemplo, para un servidor http personalizado.
Inicie el editor con un nuevo archivo de servicio:
Y agregue el siguiente contenido, que puede editar según sea necesario:
Quiero que se inicie automáticamente en el arranque:
Informe a systemd sobre los cambios e inicie el servicio:
Y ahora puedes ver el estado:
Para referencia, consulte https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/
fuente
systemd
el administrador de servicios estándar en las distribuciones más populares puede hacerlo por usted.Puede llamar
setsockopt(2)
para escuchar socket conSO_REUSEADDR
, por lo que podrá volver abind(2)
hacerlo sin esperar a que caduquen todas las conexiones. Otra posibilidad: soltar conexiones del kernel. FreeBSD tiene untcpdrop
comando para esto, no sé sobre Linux.fuente
Si su distribución de Linux usa Upstart en lugar de SysV init, entonces la
respawn
palabra clave lo hace.http://upstart.ubuntu.com/cookbook/#respawn
fuente