여러 원격 서버 셸을 실행하고 결과를 기다리는 중앙 서버 셸

여러 원격 서버 셸을 실행하고 결과를 기다리는 중앙 서버 셸

나는 다음과 같이 작동하는 서버 제어 셸을 만들었습니다.

  1. 중앙 서버에서 마스터 셸을 실행합니다.
  2. 기본 셸은 대기 서버의 원격 셸을 비동기적으로 호출합니다.
  3. 각 대체 서버 쉘은 '서버 xxx 완료'를 중앙 서버의 동일한 결과 파일에 저장합니다.
  4. 그 사이 마스터 쉘은 각 서버가 ''를 쓸 때까지 주기적으로 결과 파일을 읽습니다.완벽한'.
  5. 그런 다음 마스터 셸은 로드 밸런싱을 전환합니다.

하지만 파일에 쓰고 이를 루프로 구문 분석하는 것이 이상적인 통신 방법은 아니라고 생각합니다.

내 쉘의 가장 큰 문제는 원격 쉘이 쓰기에 실패하면 메인 쉘이 영원히 기다린다는 것입니다.완벽한'이유가 무엇이든지.


주변 전압

시스템은 Centos7이고 마스터 쉘은 에서 실행 중입니다 bash. 마스터는 다시 시작할 때마다 서버 쉘을 실행하고 tomcat전체 부팅을 기다립니다. 특정 포트가 작동 중이면 원격 쉘은 ssh명령을 통해 기본 쉘이 읽는 결과 파일을 수정합니다. 하지만 서버가 awk정보를 전달하고 교환하는 방식이 마음에 들지 않습니다 grep. 더 좋은 방법이 있어야 한다고 생각합니다.


질문

  1. 메인 쉘이 백그라운드에서 여러 원격 쉘을 실행하는 상황에서 결과 데이터를 교환하는 가장 좋은 방법은 무엇입니까?

  2. 위 작업 흐름에서 4단계가 성공할 때 기본 셸이 무한정 기다리지 않고 5단계만 실행하도록 하려면 어떻게 해야 합니까? 일반 서버를 다시 시작하지 않아도 되기를 원합니다.


편집하다

마스터 셸은 원격 셸을 실행한 후 서버 이름을 사용하여 while 루프를 실행합니다.

결과 파일은 다음과 같습니다.

server1 RUNNING
server2 RUNNING
server3 RUNNING

마스터 쉘은 server1, server2을 grep하고 server3상태가 RUNNING, FAILED또는 인지 확인합니다 DONE.

grep 이면 DONE쉘은 루프에서 서버를 제거합니다.

원격 쉘은 tomcat이 정상적으로 시작될 때만 수행됩니다 awk RUNNING.DONE

관련 정보