Estou tentando monitorar um host integrado e remoto que está gravando a saída em um arquivo: /var/log/myapp.log
Esse host pode perder energia por horas. O aplicativo pode ser morto e reiniciado.
Na minha máquina local, quero capturar o conteúdo do myapp.log em tempo real conforme ele é atualizado.
O script básico que eu tenho faz isso:
ssh user@remote_host_ip 'tail -f /var/log/myapp.log' | tee -a ~/logs/myapp.log
Isso funciona para o caso simples em que o host remoto já está ativo e pode ser conectado via SSH. Eu gostaria de algo que continuamente tentará SSH para o host remoto mais e mais até que seja bem-sucedido e, em seguida, execute o comando tail -f ...
e capture a saída localmente. Eu quero evitar ter que reexecutar este programa se o host remoto perder energia.
Pelo que pesquisei até agora, parece que posso usar alguma combinação de autossh
e screen
.
Eu tentei brincar com o script rscreen
incluído no autossh, mas não tive muita sorte. Aqui está o script modificado, que usa outro argumento para o comando ser executado no host remoto. Eu chamei o script modificado 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"
Mas quando eu corro: ./rscreen_myapp remoteuser@remotehost "tail -f /var/log/myapp.log"
, recebo:
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.
Eu estou lutando com a tela e reconhecidamente confuso com isso ... O que estou fazendo de errado? Eu não estou usando o argumento -X
corretamente? Ou eu preciso fazer algo completamente diferente? Eu preciso de alguma forma fazer uso dos arquivos screenlog.n
? (Eu preferiria evitar o identificador único .n e preferir apenas ter myapp.log na máquina local.)
Por fim, esse script / programa seria executado automaticamente e em segundo plano na minha máquina local . Portanto, enquanto a máquina local estiver ligada, ela tentará capturar / espelhar o registro da máquina remota sempre que possível e indefinidamente.
Tags ssh gnu-screen monitoring logs