Como capturar a saída tail -f do host remoto indefinidamente

3

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.

    
por tony 21.07.2015 / 21:01

0 respostas