다른 서비스가 시작된 후 서비스 실행

다른 서비스가 시작된 후 서비스 실행

MySQL NDB 클러스터를 설치했습니다. 클러스터 노드 간에 데이터베이스를 동기화하는 데 약 2~3분이 소요됩니다. 동기화가 완료되면 heartbeat라는 다른 애플리케이션을 시작할 수 있습니다. 따라서 내 쉘 스크립트에서 ndbd 서비스의 가용성을 항상 확인하고 싶습니다. 이 서비스를 사용할 수 있게 되면 5분 안에 하트비트 애플리케이션을 시작해야 합니다. 스크립트를 작성하는 데 도움을 주실 수 있나요?

답변1

"wait" bash 내장 명령을 사용해 볼 수도 있습니다.

"맨 배쉬"에서

잠깐만 [n]

지정된 프로세스를 기다리고 종료 상태를 반환합니다. n은 프로세스 ID 또는 작업 사양일 수 있습니다. 작업 사양이 제공되면 해당 작업 파이프라인의 모든 프로세스가 대기됩니다. n이 제공되지 않으면 현재 활성화된 모든 하위 프로세스가 대기되고 반환 상태는 0입니다. 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

여기에는 5분을 지정했기 때문에 300(초)의 절전 시간을 넣었지만 NDB 동기화가 완료되었는지 확인하는 것이 훨씬 더 좋습니다.

##heartbeat_startup_script
sleep 300
heartbeat

관련 정보