Eu sugeriria que você o abordasse de maneira diferente e usasse uma ferramenta de monitoramento dedicada para realizar isso.
Minha ferramenta de monitoramento favorita, que permite que os serviços sejam reiniciados caso eles falhem, ou não estejam mais ouvindo em suas portas configuradas, é monit : link
Existem muitos exemplos no arquivo de configuração, neste site e em outros lugares, sobre como configurá-lo. Vou listar um exemplo para dar uma idéia de como é simples de usar, o exemplo usa o init.d no entanto, ele pode ser facilmente convertido para usar o systemd.
Para testar, um processo existe e está escutando em uma porta específica e para iniciá-lo quando este teste falhar:
check process example with pidfile /var/run/example.pid
start program = "/etc/init.d/example start"
start program = "/etc/init.d/example stop"
if failed host 192.0.2.10 port 80 protocol http then restart
if 5 restarts within 5 cycles then timeout
Você pode deixar de fora a parte do protocolo http e a monit fará apenas uma conexão tcp simples para testá-la. O argumento protocol faz um teste mais envolvido para verificar se algo está respondendo, por exemplo, a uma solicitação http get.
Você precisa garantir que o processo ou serviço seja iniciado de forma que um
arquivo pid correspondente seja criado em / var / run. A própria Monit não cuida disso. Normalmente, se o serviço for iniciado através de um script de inicialização ou systemd, ele deverá ter um arquivo pid em / var / run.