ping de estatísticas de saída para o arquivo

0
[root@localhost ~]# while true; do timeout -s 2 1h ping 96.120.16.121 | ts '%Y-%m-%d %H:%M:%S |' | tee -a ping.log; done

mais fácil de ler o formato:

#!/bin/bash
while true; do
        timeout -s 2 1h ping 96.120.16.121 | 
        ts '%Y-%m-%d %H:%M:%S |' |
        tee -a ping.log
done

resultado esperado:

[root@localhost ~]# cat ping.log
2015-10-30 07:35:29 | PING 96.120.16.121 (96.120.16.121) 56(84) bytes of data.
2015-10-30 07:35:29 | 64 bytes from 96.120.16.121: icmp_seq=1 ttl=254 time=11.2 ms
2015-10-30 07:35:30 | 64 bytes from 96.120.16.121: icmp_seq=2 ttl=254 time=9.83 ms
2015-10-30 07:35:31 | 64 bytes from 96.120.16.121: icmp_seq=3 ttl=254 time=13.0 ms
2015-10-30 07:35:32 | 64 bytes from 96.120.16.121: icmp_seq=4 ttl=254 time=17.0 ms
2015-10-30 07:35:33 | 64 bytes from 96.120.16.121: icmp_seq=5 ttl=254 time=20.8 ms
5/5 packets, 0% loss, min/avg/ewma/max = 9.839/14.399/13.129/20.850 ms
Quit

real:

[root@localhost ~]# cat ping.log
2015-10-30 07:35:29 | PING 96.120.16.121 (96.120.16.121) 56(84) bytes of data.
2015-10-30 07:35:29 | 64 bytes from 96.120.16.121: icmp_seq=1 ttl=254 time=11.2 ms
2015-10-30 07:35:30 | 64 bytes from 96.120.16.121: icmp_seq=2 ttl=254 time=9.83 ms
2015-10-30 07:35:31 | 64 bytes from 96.120.16.121: icmp_seq=3 ttl=254 time=13.0 ms
2015-10-30 07:35:32 | 64 bytes from 96.120.16.121: icmp_seq=4 ttl=254 time=17.0 ms
2015-10-30 07:35:33 | 64 bytes from 96.120.16.121: icmp_seq=5 ttl=254 time=20.8 ms

EDIT : Ok, então eu tenho as estatísticas anexando ao arquivo de log, mas sempre que eu enviar o símbolo SIGINT com reinicializações CTRL + \ ping e as estatísticas não são registradas. Eu gostaria de poder ainda pausar e ver as estatísticas no terminal sem reiniciar o ping se possível

[root@localhost ~]# while true; do ping -w 3600 96.120.16.121 | ts '%Y-%m-%d %H:%M:%S |' | tee -i -a ping.log; done

script:

#!/bin/bash
while true; do 
        ping -w 3600 96.120.16.121 | 
        ts '%Y-%m-%d %H:%M:%S |' | 
        tee -i -a ping.log
done
    
por randomdev2 30.10.2015 / 13:22

3 respostas

1

Adicione a opção --foreground ao comando yout timeout , pois o ping parece testar está sendo usado em um tty para configurar o sinal de manuseio.

Ou simplesmente pare de usar timeout e peça ao ping para parar após 60 * 60 segundos:

 ping -w 3600 96.120.16.121 

Para sua nova pergunta, ignore os sinais no restante do seu canal:

#!/bin/bash
ping -w 3600 96.120.16.121 | 
(    trap '' quit
     ts '%Y-%m-%d %H:%M:%S |' | 
     tee -i -a ping.log
)
    
por 30.10.2015 / 13:39
1

Isso é executado indefinidamente, nunca reinicia o ping, o ping imprime as estatísticas periodicamente (ajuste o sleep no código a seguir). O Bash é opcional e é compatível com / bin / sh. Você pode matar isso com CTRL-C ou SIGHUP, SIGINT, SIQUIT ou SIGTERM.

#!/bin/sh

trap 'kill -TERM $! 2>/dev/null; exit' HUP INT QUIT TERM

while true; do
        (
            ping localhost 2>&1 &
            trap "kill -INT $!" HUP INT QUIT TERM
            while true
            do
                sleep 5;
                if ! ps $! > /dev/null || ! kill -QUIT $!
                then break
                fi
            done &
            wait
        ) |
        ts '%Y-%m-%d~%H:%M:%S' |
        tee -i ping_$(date +'%Y-%m-%d_%H.%M.%S').log
done
    
por 30.10.2015 / 13:52
0

Por padrão, o comando tee pára de escrever e fecha o arquivo depois de receber o sinal para parar (um Ctlr-C , enviado por timeout comando).

Basta adicionar a opção -i para tee e se divertir.

Exemplo:

#!/bin/bash
while true; do
        timeout -s 2 1h ping 96.120.16.121 | 
        ts '%Y-%m-%d~%H:%M:%S' |
        tee -i ping_$(date +'%Y-%m-%d_%H.%M.%S').log
done
    
por 30.10.2015 / 13:40