executando um serviço após outro serviço ter sido iniciado

executando um serviço após outro serviço ter sido iniciado

eu instalei o cluster MySQL NDB. São necessários cerca de 2 a 3 minutos para sincronizar o banco de dados entre os nós do cluster. Assim que a sincronização terminar, posso iniciar outro aplicativo chamado heartbeat. Portanto, em meu script de shell, quero verificar a disponibilidade do serviço ndbd o tempo todo. Assim que este serviço estiver disponível, preciso iniciar o aplicativo de pulsação em cinco minutos. Você poderia me ajudar a escrever o roteiro.

Responder1

Você também pode tentar usar o comando interno "wait" do bash.

De "man bash"

espere [n]

Aguarde o processo especificado e retorne seu status de encerramento. n pode ser um ID de processo ou uma especificação de trabalho; se uma especificação de trabalho for fornecida, todos os processos no pipeline desse trabalho serão aguardados. Se n não for fornecido, todos os processos filhos atualmente ativos serão aguardados e o status de retorno será zero. Se n especificar um processo ou trabalho inexistente, o status de retorno será 127. Caso contrário, o status de retorno será o status de saída do último processo ou trabalho esperado.

Seu script poderia ser algo assim:

# send to background
./ndb_startup_script & 

# wait on pid of ndb_startup_script
wait $!

if [ $? -eq 0 ] # assuming 0 is ret code for successful run
then 
    ./heartbeat_startup_script
else 
    # extra stuff to handle error
fi

Responder2

O que eu gostaria é que o script ndb execute outro script, para que ele não espere os 5 minutos terminarem e bloqueie o início de outros serviços.

## whatever starts ndb
exec heartbeat_startup_script

Coloquei um sleep 300 (segundos) aqui, porque você especificou 5 minutos, mas verificar se a sincronização do ndb foi feita seria muito melhor.

##heartbeat_startup_script
sleep 300
heartbeat

informação relacionada