여러 SSH 서버에서 원격 명령의 출력을 즉시 기록합니다.

여러 SSH 서버에서 원격 명령의 출력을 즉시 기록합니다.

나는 SSH를 통해 3개의 호스트(2개의 원격 호스트, 1개의 테스트용 호스트)에 연결하고 기록하려는 터미널에 텍스트를 출력하는 장기 실행 GUI 프로그램을 실행하는 간단한 bash 스크립트를 작성했습니다.

#!/bin/bash
ssh -f -X user@remote1 '(python -u long_running_program.py &> ~/log1.txt)'
ssh -f -X user@remote2 '(python -u long_running_program.py &> ~/log2.txt)'
ssh -f -X user@localhost '(python -u long_running_program.py &> ~/log3.txt)'
multitail -s 3 ~/log*

위에서 볼 수 있듯이 f 매개변수를 사용하여 ssh를 호출하면 백그라운드에서 실행되어 스크립트가 계속 실행될 수 있습니다. 원격 서버에서 버퍼링되지 않은 스위치를 사용하여 Python 프로그램을 호출하고 출력을 로그 파일로 리디렉션합니다(원격 및 로컬 시스템의 홈 디렉터리는 모두 네트워크 마운트 드라이브에 있으므로 ~를 사용하면 모든 시스템에서 동일한 결과가 제공됩니다). 경로) 어디에).

위의 기술은 기술적으로는 가능하지만, 원격 컴퓨터에서 로그 2개(log1, log2)를 업데이트하는 속도가 매우 느립니다. 파일 업데이트는 파일을 보기 위해 멀티테일, vi 등을 사용하는지 여부에 관계없이 20초 이상 걸릴 수 있는 반면, 로컬 로그 파일(log3) 업데이트는 즉시 이루어집니다.

이런 일이 발생하지 않는지 확인하려면 원격으로 수동으로 SSH를 통해 연결하고 출력을 파일로 리디렉션하지 않고 프로그램을 실행할 수 있습니다. 예상대로 출력은 지연 없이 지속적으로 스트리밍됩니다. 또한 버퍼링을 끄고 스크립트 /tee/ 등을 사용하는 등 다양한 시도를 해봤지만 소용이 없었습니다.

원인 및/또는 해결 방법을 아는 사람이 있습니까?

답변1

나는 사용하는 것이 좋습니다퍼프 퍼프여러 직렬 SSH 명령을 동시에 실행하는 대신 여러 병렬 SSH 세션을 실행하도록 특별히 설계되었습니다.

예를 들어,

pssh -i -H user@remote1 -H user@remote2 -H user@localhost '(python -u long_running_program.py &> ~/log$PSSH_NODENUM.txt)'

관련 정보