ejecutar un servicio después de que se haya iniciado otro servicio

ejecutar un servicio después de que se haya iniciado otro servicio

He instalado el clúster MySQL NDB. Se necesitan entre 2 y 3 minutos para sincronizar la base de datos entre los nodos del clúster. Una vez finalizada la sincronización, puedo iniciar otra aplicación llamada heartbeat. Por lo tanto, en mi script de shell, quiero verificar la disponibilidad del servicio ndbd todo el tiempo. Una vez que este servicio esté disponible, necesito iniciar la aplicación Heartbeat en cinco minutos. ¿Podrías ayudarme a escribir el guión?

Respuesta1

También puede intentar utilizar el comando integrado de bash "esperar".

De "man bash"

espera [n]

Espere el proceso especificado y devuelva su estado de terminación. n puede ser un ID de proceso o una especificación de trabajo; si se proporciona una especificación de trabajo, se esperan todos los procesos en la canalización de ese trabajo. Si no se proporciona n, se esperan todos los procesos secundarios actualmente activos y el estado de devolución es cero. Si n especifica un proceso o trabajo inexistente, el estado de devolución es 127. De lo contrario, el estado de devolución es el estado de salida del último proceso o trabajo esperado.

Su script podría verse así:

# 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

Respuesta2

Lo que haría es que el script ndb ejecute otro script, para que no espere a que finalicen los 5 minutos y bloquee el inicio de otros servicios.

## whatever starts ndb
exec heartbeat_startup_script

Puse un sueño de 300 (segundos) aquí, porque usted especificó 5 minutos, pero sería mucho mejor verificar si la sincronización ndb está realizada.

##heartbeat_startup_script
sleep 300
heartbeat

información relacionada