Назад | Перейти на главную страницу

выполнение службы после запуска другой службы

Я установил кластер MySQL NDB. Для синхронизации базы данных между узлами кластера требуется около 2-3 минут. Как только синхронизация завершится, я могу запустить другое приложение под названием heartbeat. Поэтому в моем сценарии оболочки я хочу постоянно проверять доступность службы ndbd. Как только эта служба станет доступной, мне нужно будет запустить приложение Heartbeat через пять минут. Не могли бы вы помочь мне написать сценарий.

Вы также можете попробовать использовать встроенную команду bash "wait".

Из "man bash"

подождите [n]

Дождитесь указанного процесса и верните его статус завершения. 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

Я бы хотел, чтобы сценарий ndb выполнял другой сценарий, чтобы он не ждал завершения 5 минут и не блокировал запуск других служб.

## whatever starts ndb
exec heartbeat_startup_script

Я поставил здесь сон 300 (секунд), потому что вы указали 5 минут, но проверка того, выполняется ли синхронизация ndb, будет намного лучше.

##heartbeat_startup_script
sleep 300
heartbeat