No Windows, você pode definir o que deve acontecer se / quando um serviço falhar. Existe uma maneira padrão de conseguir a mesma coisa no Linux (CentOS em particular)?
Uma parte maior da minha pergunta é: como você lida com soquetes que foram deixados em aberto - por exemplo, nos estados TIME_WAIT, FIN_WAIT1 etc.
No momento, se o serviço que estou desenvolvendo falhar, esperarei que os soquetes limpem ou alterem a porta de escuta antes de poder reiniciá-la manualmente.
Obrigado pela ajuda.
Apenas respondendo à parte de reinicialização do serviço. Encontrei o Monit também, mas no CentOS 7 o systemd cuida de tudo isso para você. Você só precisa adicionar essas duas linhas ao arquivo .service (se elas ainda não estiverem lá):
Consulte https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ para obter referência.
Se você deseja criar um serviço systemd personalizado, é bastante simples gravar seu próprio arquivo de serviço. Veja o exemplo abaixo, para um servidor http personalizado.
Inicie o editor com um novo arquivo de serviço:
E adicione o seguinte conteúdo, que você pode editar conforme necessário:
Quero que ele inicie automaticamente na inicialização:
Informe o systemd sobre as alterações e inicie o serviço:
E agora você pode ver o status:
Para referência, consulte https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/
fonte
systemd
o gerente de serviços padrão das distribuições mais populares pode fazer isso por você.Você pode ligar
setsockopt(2)
para o soquete de escutaSO_REUSEADDR
, para poder utilizá-bind(2)
lo novamente sem esperar pela expiração de todas as conexões. Outra possibilidade: descartar conexões do kernel. O FreeBSD temtcpdrop
comando para isso, não conhece o Linux.fonte
Se sua distribuição Linux usa o Upstart em vez do SysV init, a
respawn
palavra - chave faz isso.http://upstart.ubuntu.com/cookbook/#respawn
fonte