여러 원격 호스트에서 ssh 명령에 대한 정리 트랩


6

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 ??
}

답변:


2

gnu parallel 용으로 보입니다 . 다음과 같이 해보십시오 :

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

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

-u여기서도 작동해야합니다. 일반적으로 행의 일부가 섞일 수 있지만 사용하는 명령은 행 기반 일 수 없으므로 발생하지 않아야합니다.

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


Gnu parallel은 내가 시도하지 않은 몇 가지 유틸리티 중 하나였습니다. 아름답게 작동합니다! 건배!
deephacks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.