원격 쉘에서 출력을 얻는 방법

원격 쉘에서 출력을 얻는 방법

명령줄에서 실행되는 서버에서 실행되는 응용 프로그램이 있습니다. 때로는 SSH를 통해 서버에 연결하고 애플리케이션에서 stdout에 기록된 출력 메시지를 받아야 합니다. 해당 터미널에서 메시지를 읽고/스니핑/캡처하는 방법이 있습니까? 서버가 Fedora 12를 실행 중입니다.

다시 한번 확인하기 위해. 서버에 대한 관리자 액세스 권한이 있지만 실행 중인 애플리케이션이 중요한 환경에 있기 때문에 중지할 수 없습니다. 최종 사용자는 터미널에서 애플리케이션을 실행합니다. SSH를 통해 사용자가 이상한 동작을 볼 때마다 터미널에서 메시지를 읽어야 합니다. 그래픽 응용 프로그램입니다. screen을 사용하여 응용 프로그램을 실행하는 스크립트를 작성할 수도 있습니다. 즉, "실행 프로그램"을 변경해야 하지만 일부 서버는 보안상의 이유로 LAN 외부에서 항상 액세스할 수는 없습니다. 업데이트가 복잡합니다. 내 질문은 실행 중인 응용 프로그램이 있는 경우 응용 프로그램을 중지하고 화면이 꺼진 상태에서 다시 실행하지 않고 터미널에서 출력을 캡처할 수 있는 방법이 있습니까?

답변1

확실한 해결책은 애플리케이션의 출력을 파일로 리디렉션한 다음 해당 파일을 보는 것입니다.

nohup application >app.log &  # on the server
ssh server tail -n +1 -f app.log   # on the client

애플리케이션이 터미널에 출력되어야 하는 경우 다음 위치에서 실행하세요.화면.

서버에서:
screen -S somename -Rrd
application
Ctrl+를A D 눌러 스크린 세션에서 "분리"하여 백그라운드에서 실행되도록 합니다.

고객으로부터:
ssh server
screen -S somename -Rrd 스크린 세션에 다시 연결

메시지를 자동으로 녹음하려면 가장 좋은 방법은 다음을 사용하는 것입니다.표준 로깅 시설. 대략적으로 가장 기본적인 syslog를 사용하거나 더 나은 필터링 및 예약 옵션을 사용하여 로그 항목이 다른 컴퓨터로 전송되도록 예약할 수 있습니다.시스템 로그.

답변2

이 경우 출력을 파일로 리디렉션하는 것보다 더 나은 방법은 다음으로 리디렉션하는 것입니다.명명된 파이프(fifo), 모든 데이터를 디스크에 저장할 필요가 없기 때문입니다. 프로그램이 많은 출력을 생성하면 디스크 공간이 부족해질 수 있습니다.

명명된 파이프는 기존의 명명되지 않은 쉘 파이프 대신 파일 시스템을 사용합니다. 이는 mkfifo() 또는 mknod()를 사용하여 명시적으로 생성되며 두 개의 독립적인 프로세스가 이름으로 파이프에 액세스할 수 있습니다. 한 프로세스는 파이프를 판독기로 열 수 있고 다른 프로세스는 작성자로 파이프를 열 수 있습니다.

mkfifo /path/to/my/pipe
someprogram > /path/to/my/pipe
tail -f /path/to/my/pipe

표준 출력으로도 출력하려면 다음을 사용할 수 있습니다 tee.

someprogram | tee /path/to/my/pipe

답변3

특별한 환경에서 프로그램을 시작하거나 중지했다가 다시 시작하는 것도 허용되지 않기 때문에 특별한 방법으로 서버를 시작해야 하는 솔루션을 찾고 있습니다. 누군가 서버에서 프로그램을 시작했는데 문제가 발생하면 터미널에서 메시지 출력을 확인해야 합니다. 이것을 달성하는 방법에 대한 아이디어가 있습니까?

관련 정보