파일에 출력을 쓰는 원격 내장 호스트를 모니터링하려고 합니다: /var/log/myapp.log
콘솔의 전원이 몇 시간 동안 끊길 수 있습니다. 애플리케이션이 종료되었다가 다시 시작될 수 있습니다.
내 로컬 컴퓨터에서 업데이트되는 myapp.log 콘텐츠를 실시간으로 캡처하고 싶습니다.
내 기본 스크립트는 다음을 수행합니다.
ssh user@remote_host_ip 'tail -f /var/log/myapp.log' | tee -a ~/logs/myapp.log
이는 원격 호스트가 이미 작동 중이고 SSH를 통해 연결할 수 있는 간단한 경우에 작동합니다. 성공할 때까지 계속해서 SSH를 통해 원격 호스트에 연결을 시도한 다음 명령을 실행 tail -f ...
하고 로컬에서 출력을 캡처하는 것을 원합니다. 원격 호스트의 전원이 꺼지면 프로그램이 다시 실행되는 것을 방지하고 싶습니다.
autossh
지금까지 검색해 보면 및 의 조합을 사용하고 싶은 것 같습니다 screen
.
rscreen
autossh와 함께 제공되는 스크립트를 사용해 보았지만 운이 없었습니다. 다음은 다른 매개변수를 사용하여 원격 호스트에서 명령을 실행하는 수정된 스크립트입니다. 수정된 스크립트를 호출합니다 rscreen_myapp
.
#!/bin/sh
#
# MODIFIED (not working) sample script to use autossh to open up a remote screen
# session, or reconnect to an existing one.
#
# $Id: rscreen,v 1.4 2002/05/07 17:54:13 harding Exp $
autossh -M 20004 -t $1 "screen -e^Zz -D -R -X $2"
하지만 실행하면 다음과 같은 ./rscreen_myapp remoteuser@remotehost "tail -f /var/log/myapp.log"
결과를 얻습니다.
Agent pid 28990
Identity added: /home/localuser/.ssh/id_rsa (/home/localuser/.ssh/id_rsa)
No screen session found.
Connection to 10.10.3.9 closed.
화면 때문에 어려움을 겪고 있고 정말 혼란스럽습니다. 제가 뭘 잘못하고 있는 걸까요? 인수를 잘못 사용하고 있습니까 -X
? 아니면 다른 일을 해야 하나요? 어떻게든 이 파일을 활용해야 합니까 screenlog.n
? (저는 .n 고유 식별자를 사용하는 것을 피하고 로컬 컴퓨터에서 myapp.log를 사용하는 것을 선호합니다.)
결국 이 스크립트/프로그램은 내 백그라운드에서 자동으로 실행됩니다.현지의기계. 따라서 로컬 시스템이 열려 있는 동안 원격 시스템의 로그를 무기한으로 캡처/미러링하려고 시도합니다.