Eu tenho algum software (consul) que é executado como um agente em segundo plano e quero ter certeza de que ele está funcionando o tempo todo. Este é o comando que eu uso para iniciar o agente:
nohup consul agent -server -bootstrap-expect 1 \
-data-dir /tmp/consul \
-bind=$(hostname -i) \
-client=0.0.0.0 \
-node=$(hostname) \
-config-dir /etc/consul.d \
-ui-dir /opt/consul/ &
Agora, tenho uma verificação que é executada em /etc/rc.local :
#!/bin/sh -e
while true; do
if [ -z "$(ps aux | grep "consul agent" | grep -v grep)" ]; then
sh /etc/rc.local2;
fi;
sleep 3;
done
exit 0
Se o agente consul já estiver parado, será iniciado o /etc/rc.local2 que é executado:
#!/bin/sh -e
nohup consul agent -server -bootstrap-expect 1 \
-data-dir /tmp/consul \
-bind=$(hostname -i) \
-client=0.0.0.0 \
-node=$(hostname) \
-config-dir /etc/consul.d \
-ui-dir /opt/consul/ &
exit 0
Esse sistema funciona, o problema é que ele exige que os servidores que eu provisiono (todos que executam várias outras formas de servidores consul e clientes) sejam reiniciados antes de realmente entrar em vigor. Mesmo se eu executar sudo nohup /etc/rc.local & consul ainda falhará ocasionalmente.
Esta foi apenas uma solução que eu criei, mas eu definitivamente sei que não é a melhor solução que eu poderia estar usando. Qual é a melhor maneira de verificar e garantir que esse processo esteja sempre em execução?