
Я установил кластер MySQL NDB. Синхронизация базы данных между узлами кластера занимает около 2-3 минут. Только после завершения синхронизации я могу запустить другое приложение под названием heartbeat. Поэтому в моем скрипте оболочки я хочу постоянно проверять доступность службы ndbd. Как только эта служба станет доступной, мне нужно запустить приложение heartbeat через пять минут. Не могли бы вы помочь мне написать скрипт.
решение1
Вы также можете попробовать использовать встроенную команду bash «wait».
Из "man bash"
ждать [н]
Ожидание указанного процесса и возврат его статуса завершения. n может быть идентификатором процесса или спецификацией задания; если спецификация задания указана, ожидаются все процессы в конвейере этого задания. Если n не указано, ожидаются все активные в данный момент дочерние процессы, а статус возврата равен нулю. Если n указывает несуществующий процесс или задание, статус возврата равен 127. В противном случае статус возврата является статусом выхода последнего ожидаемого процесса или задания.
Ваш сценарий может выглядеть примерно так:
# 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
решение2
Мне бы хотелось, чтобы скрипт ndb запускал другой скрипт, чтобы ему не приходилось ждать 5 минут до завершения работы и блокировать запуск других служб.
## whatever starts ndb
exec heartbeat_startup_script
Я установил здесь сон на 300 (секунд), потому что вы указали 5 минут, но проверка того, выполнена ли синхронизация NDB, была бы гораздо лучше.
##heartbeat_startup_script
sleep 300
heartbeat