SSH를 사용하여 여러 원격 호스트에서 임의의 명령을 실행하고 싶습니다. 이들 중 대부분은 서버 리소스를 모니터링하고 출력을 로컬 워크스테이션(예 tail -f
: mpstat
또는 tcpdump
/ tcpflow
etc ) 에 집계하는 장기 실행 명령입니다 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 ??
}
답변1
뭔가 같아GNU 병렬다음과 같이 시도해 보세요.
function server_ssh() {
parallel --line-buffer ssh server{} "$1" ::: 01 02 03
}
--line-buffer
서로 다른 명령의 출력을 함께 혼합할 수 있도록 하는 옵션이 필요합니다(기본적으로 각 명령의 출력을 그룹화하므로 각 명령의 표시가 완료될 때까지 기다려야 합니다).
-u
여기서도 일해야 해. 일반적으로 일부 줄을 함께 혼합할 수 있지만 사용 중인 명령은 아마도 줄 기반이므로 이런 일이 발생해서는 안 됩니다.
편집: --line-buffer
내 버전(20130922-1)은 알파 테스트 중이므로 선택하겠습니다 -u
.