여러 원격 호스트의 SSH 명령에 대한 정리 트랩

여러 원격 호스트의 SSH 명령에 대한 정리 트랩

SSH를 사용하여 여러 원격 호스트에서 임의의 명령을 실행하고 싶습니다. 이러한 명령은 대부분 서버 리소스를 모니터링하고 출력을 로컬 워크스테이션(예 tail -f: mpstat또는 tcpdump/ tcpflowgrep)에 집계하는 장기 실행 명령입니다.

문제는 나중에 모든 호스트에 대한 SSH 연결과 원격 명령을 모두 안정적으로 종료하면서 명령을 계속 실행하는 방법을 찾지 못했다는 것입니다.

나는 많은 ssh플래그 변형, 대기, 고양이, 읽기, 트랩 등을 시도했습니다. 둘 다 즉시 종료되거나, 로컬 터미널이 멈추거나, ssh 연결이 종료된 후에도 원격 명령이 원격 호스트에서 계속 실행됩니다.

이것이 내가 지금 가지고 있는 것입니다.

function server_ssh() {
  pids=""
  for box in 01 02 03; do
    ssh -t -t -f server$box "$1" &
    pids="$pids $!"
  done
  trap 'kill -9 $pids' SIGINT
  # wait, cat, read ??
}

답변1

뭔가를 위한 것 같아GNU 병렬. 다음과 같이 시도해 보십시오.

function server_ssh() {
  parallel --line-buffer ssh server{} "$1" ::: 01 02 03
}

--line-buffer옵션은 서로 다른 명령의 출력을 함께 혼합하는 데 필요합니다(기본적으로 각 명령의 출력을 함께 그룹화하므로 각 명령이 표시될 때까지 기다려야 합니다).

-u여기서도 일해야 해. 일반적으로 행의 일부가 서로 섞일 수 있지만 사용하는 명령은 행 기반이므로 그런 일이 발생해서는 안 됩니다.

편집: --line-buffer내가 가지고 있는 버전(20130922-1)에서 알파 테스트 중이므로 -u.

관련 정보