Inicie e finalize o TAIL executando via SSH usando BASH

3

Estou tentando monitorar as alterações de um arquivo via SSH e copiar as alterações dele no computador local usando o BASH. Eu corri o seguinte comando para monitorar e copiar:

ssh [email protected] "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

Qual funciona perfeitamente. Mas então continua correndo. Eu quero terminar a cauda e o ssh após determinado período (ou quando uma determinada string for encontrada).

Eu tentei o seguinte comando, mas não funcionou:

ssh -t [email protected] "tail -F /media/sdcard/SA000001.log && sleep 10 && exit"> ~/Desktop/Modem.log

Eu também tentei passar exit e o valor ASCII de CTRL+C via echo, mas não consegui finalizar / matar o tail e o ssh.

Então eu tentei o seguinte:

#!/bin/sh 

ssh -t [email protected] "tail -F /media/sdcard/SA000001.log | while read TEMPLOGLINE"> ~/Desktop/Modem.log

do
   [[ "${TEMPLOGLINE}" == *"temp"* ]] && pkill -P $$ tail
done

exit

Eu também tentei isso:

#!/bin/sh 

ssh -t [email protected] "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

ssh -t [email protected] "/X03"
ssh -t [email protected] "exit"

Aqui está o meu arquivo bash neste momento:

#!/bin/sh 

ssh -t [email protected] "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log

Alguma sugestão sobre como devo proceder com isso?

Obrigado antecipadamente.

    
O
por Russo 18.08.2017 / 12:55

2 respostas

4

Parece que você está procurando algo assim:

#!/bin/bash
ssh [email protected] tail -F /media/sdcard/SA000001.log | while read line; do
    echo "$line"
    if [[ $line =~ 'temp' ]]; then
        exit
    fi
done

Salve o script acima como foo.sh ou qualquer outra coisa, torne-o executável ( chmod a+x foo.sh ) e, em seguida, execute-o:

foo.sh > ~/Desktop/Modem.log
    
por terdon 18.08.2017 / 13:58
3

Este é o comando que você precisa para realizar o trabalho:

ssh USER@HOST "bash -c 'sed '/PATTERN/q' <(tail -F /path/to/dest/log)'"> inlocal.log

você também pode usar awk da seguinte maneira:

ssh USER@HOST "bash -c 'awk '1;/PATTERN/{exit}' <(tail -F /path/to/dest/log)'"> inlocal.log
    
por αғsнιη 18.08.2017 / 13:55