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


6

ssh를 사용하여 여러 원격 호스트에서 임의의 명령을 실행하고 싶습니다. 이 명령은 주로 (같은 서버 자원을 모니터링하고 내 로컬 워크 스테이션에 출력을 집계 장기 실행 명령입니다 tail -f, mpstat또는 tcpdump/ tcpflow로 grep등).

문제는 나중에 모든 호스트에 대한 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.