Fazer o script criar log somente quando a situação da conexão mudar !!

1. Fazer o script criar log somente quando a situação da conexão mudar !!

Héliton
helitonzor

(usa Fedora)

Enviado em 20/04/2019 - 20:38h

Olá, sou novato no shell então estou aqui buscando uma ajuda, tenho um script q estou usando para verificar a conectividade de certos ips para saber quando eles estao online ou offline, mas me deparei com a seguinte situação quando coloco o script rodar ele estara me informando a cada 30s quais os ips estao on ou off me dando data e hora, mas eu preciso q ele me forneça a data e hora q certo ip caiu pela primeira vez retornando e me informar somente quando esse certo ip voltar, não me informando a cada 30s que ele continua off assim renovando a data e a hora.


#!/bin/bash
while :;
do
ListaHosts=arquivo.txt
diretorio=$(pwd)
Arquivo=logs/arquivo2.txt

cat $ListaHosts | while read ip
do
ping -c5 $ip > /dev/null
if [ $? = 0 ]; then
echo "ONLINE - $ip: `date +"%d/%m - %H:%M"`" >> $Arquivo
else
echo "OFFLINE - $ip: `date +"%d/%m - %H:%M"`" >> $Arquivo
fi
done
sort -u $Arquivo
sleep 30s
done



  


2. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/04/2019 - 01:35h


helitonzor escreveu:

Olá, sou novato no shell então estou aqui buscando uma ajuda,
tenho um script q estou usando para verificar a conectividade de certos ips para saber quando eles estao online ou offline,
mas me deparei com a seguinte situação:
Quando coloco o script rodar ele estara me informando a cada 30s quais os ips estao on ou off me dando data e hora,
Preciso q ele me forneça a data e hora q certo ip caiu pela primeira vez retornando e me informar somente quando esse certo ip voltar, não me informando a cada 30s que ele continua off assim renovando a data e a hora.

Veja se ajuda:
#!/bin/bash
ListaHosts=Arquivo.txt
diretorio=$(pwd)
log=Arquivo2.txt

line() {
printf '%*s' "40" '' | sed "s/ /-/g"
}

passo=0
clear;
#Monta Log inicial
printf " $(line)\n INICIO: %(%x : %X)T\n $(line)\n\n" > ${log}
while read ip;do
echo -e "ONLINE:$ip:INICIO" >> ${log}
echo -e "OFFLINE:$ip:INICIO\n$(line)" >> ${log}
done<${ListaHosts}

while :;do
DtHr=$(date +"%d/%m/%Y:%H:%M:%S")
let passo++;
echo "PASSO: $passo ${DtHr}"
#Atualiza Log
while read ip;do
if ping -c1 ${ip} > /dev/null;then
sed -i 's|ONLINE:'${ip}':.*|ONLINE:'${ip}':'${DtHr}'|' $log
else
sed -i 's|OFFLINE:'${ip}':.*|OFFLINE:'${ip}':'${DtHr}'|' $log
fi
done<${ListaHosts}
#sort -u $log
sleep 30s
done


Importante Leia => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


3. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Héliton
helitonzor

(usa Fedora)

Enviado em 21/04/2019 - 12:54h

Bom, coloquei seu script pra rodar e fiz algumas alterações pra ver se ficava com eu queria, acho que estou no caminho graças a sua ajuda mas ainda nao esta como eu queria, atualmente ele esta sim gerando um horario fixo q nao se altera quando o script roda novamente mas tmb nao esta me informando se o ip esta online ou offline, só me manda as duas informações.
https://i.imgur.com/ySELktk.png


4. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/04/2019 - 01:36h


Boa noite Heliton.
Qual bash vc esta usando?
E qual a distribuição Linux?
Como está chamando o script, qual o comando?
Poste um trecho do arquivo dos IPs.
Testei aqui e funcionou conforme planejado.
No início do script é montado o arquivo com a data e hora do início, e todos IP, sendo, uma linha Online e outra Offline, depois no laço infinito, são atualizadas, a data e hora para cada IP.
Vou ver se ainda hoje posto um print da tela.

Att.: Marcelo Oliver


5. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Héliton
helitonzor

(usa Fedora)

Enviado em 22/04/2019 - 02:06h

Bem estou usando o Fedora, meu plano era ter um script checando essas conexaoes q seriam enviadas para um log e esse log iria ser mostrada em um http como na imagem q mandei, mas quero q no log cada vez q muda a situação de online para offline ele adicionaria uma nova linha e nao atualizar a data e hora somente pois futuramente sera adicionado muitos ip e te-los um embaixo do outro somente atualizando data e hora ficaria ruim de monitorar.
Estou usando o script dessa maneira:
#!/bin/bash
ListaHosts=alarmes.txt
diretorio=$(pwd)
log=conexao.txt

line() {
printf '%*s' "40" '' | sed "s/ /-/g"
}

passo=0
clear;
#Monta Log inicial
printf " $(line)\n INICIO: %(%d/%m - %H:%M)T\n $(line)\n\n" > ${log}
cat $ListaHosts | while read ip;do
ping -c5 ${ip} > /dev/null;
if [ $? = 0 ]; then
echo "ONLINE - $ip - `date +"%d/%m - %H:%M"`" >> ${log}
else
echo "OFFLINE - $ip - `date +"%d/%m - %H:%M"`" >> ${log}
fi
done<${ListaHosts}

while :;do
DtHr=$(date +"%d/%m - %H:%M")
let passo++;
echo "PASSO: $passo ${DtHr}"
#Atualiza Log
while read ip;do
if ping -c5 ${ip} > /dev/null;then
sed -i 's|ONLINE - '${ip}' - .*|ONLINE - '${ip}' - '${DtHr}'|' $log
else
sed -i 's|OFFLINE - '${ip}' - .*|OFFLINE - '${ip}' - '${DtHr}'|' $log
fi
done<${ListaHosts}
#sort -u $log
sleep 5s
done

Obtendo esse resultado:
https://i.imgur.com/PrWBofK.png


6. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/04/2019 - 18:58h


helitonzor escreveu:

Bem estou usando o Fedora.
Meu plano era ter um script checando essas coneçoes q seriam enviadas para um log e esse log iria ser mostrada em um http como na imagem q mandei,
mas quero q no log cada vez q muda a situação de online para offline ele adicionaria uma nova linha e nao atualizar a data e hora somente pois futuramente sera adicionado muitos ip e te-los um embaixo do outro somente atualizando data e hora ficaria ruim de monitorar.
Estou usando o script dessa maneira:
#!/bin/bash
ListaHosts=alarmes.txt
diretorio=$(pwd)
log=conexao.txt

line() {
printf '%*s' "40" '' | sed "s/ /-/g"
}

passo=0
clear;
#Monta Log inicial
printf " $(line)\n INICIO: %(%d/%m - %H:%M)T\n $(line)\n\n" > ${log}
cat $ListaHosts | while read ip;do
ping -c5 ${ip} > /dev/null;
if [ $? = 0 ]; then
echo "ONLINE - $ip - `date +"%d/%m - %H:%M"`" >> ${log}
else
echo "OFFLINE - $ip - `date +"%d/%m - %H:%M"`" >> ${log}
fi
done<${ListaHosts}

while :;do
DtHr=$(date +"%d/%m - %H:%M")
let passo++;
echo "PASSO: $passo ${DtHr}"
#Atualiza Log
while read ip;do
if ping -c5 ${ip} > /dev/null;then
sed -i 's|ONLINE - '${ip}' - .*|ONLINE - '${ip}' - '${DtHr}'|' $log
else
sed -i 's|OFFLINE - '${ip}' - .*|OFFLINE - '${ip}' - '${DtHr}'|' $log
fi
done<${ListaHosts}
#sort -u $log
sleep 5s
done

Obtendo esse resultado:
https://i.imgur.com/PrWBofK.png


Boa tarde Heliton.
Fiz dessa forma, atendendo o enunciado do seu 1º tópico....
Mas eu preciso q ele me forneça a data e hora q certo ip caiu pela primeira vez retornando e me informar somente quando esse certo ip voltar, não me informando a cada 30s que ele continua off assim renovando a data e a hora.
Veja bem,
Em, Monta log INICIAL,
é gerado um arquivo, com 01 REGISTRO e 02 CAMPOS para cada IP,
Independe de ON ou OFF LINE.
Exemplo:
data="date +%d:%m:%Y-%H:%M:%S.%5N"
#MONTA LOG INICIAL
while read ip;do
echo -e {ON_,OFF}'LINE:'${ip}':'$($data)|sed 's/$/\n/;s/ /\n/';
done<${ips}

192.168.1.1-ON_LINE-22:04:2019-15:47:48
192.168.1.1-OFFLINE-22:04:2019-15:47:48

192.168.1.2-ON_LINE-22:04:2019-15:47:48
192.168.1.2-OFFLINE-22:04:2019-15:47:48

192.168.1.3-ON_LINE-22:04:2019-15:47:48
192.168.1.3-OFFLINE-22:04:2019-15:47:48

Enquanto que, o laço "infinito", atualiza a HORA

Importante => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


7. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Héliton
helitonzor

(usa Fedora)

Enviado em 22/04/2019 - 20:25h

Bom, quem sabe eu expliquei de um jeito um pouco difícil, desculpa ser tão existente com isso, mas acho que dessa forma seria difícil monitorar muitos ips ao msm tempo, digamos q tivéssemos ips do 192.168.1.1 ao 254, não teria como ficar olhando para cada um para saber o ultimo horário online, vc não ficara sabendo de imediato se cair a não ser que ficasse checando minuto a minuto, pensei em algo dessa forma: https://i.imgur.com/jywzmjT.png.
Assim ficaria mais visível se algum ip caiu me mostrando a hora e quando ele voltar tmb mostrando data e hora


8. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/04/2019 - 22:15h

helitonzor escreveu:

Bom, quem sabe eu expliquei de um jeito um pouco difícil, desculpa ser tão existente com isso, mas acho que dessa forma seria difícil monitorar muitos ips ao msm tempo, digamos q tivéssemos ips do 192.168.1.1 ao 254, não teria como ficar olhando para cada um para saber o ultimo horário online, vc não ficara sabendo de imediato se cair a não ser que ficasse checando minuto a minuto, pensei em algo dessa forma: https://i.imgur.com/jywzmjT.png.
Assim ficaria mais visível se algum ip caiu me mostrando a hora e quando ele voltar tmb mostrando data e hora

Heliton, boa noite....
Sinceramente está difícil entender ..... rsrsrsrs
Agora monta o log completo....
#!/bin/bash
ips=ip.txt
log=log.txt
passo=0;
data="date +%d:%m:%Y;%H:%M:%S";
>${log};

line() { printf '%*s' "40" '' | sed "s/ /-/g";}

clear;

while :;do
clear;
let passo++;
printf "\e[2f$(line) \e[3f PASSO: $passo $($data.%3N) \e[4f$(line)\n\n"
while read ip;do
stt=$(fping -r1 ${ip}|sed -r 's/([[0-9.]+)( )(is alive)/ON_LINE\;\1\;/;s/([[0-9.]+)( )(is unreachable)/OFFLINE\;\1\;/')
echo "${stt}$($data)" >> $log
done<${ips}
sleep 30;
done

OBS.: Optei pelo "fping" com o sed para evitar o condicional....
Com o comando:
stt=$(fping -r1 ${ip}|sed -r 's/([[0-9.]+)( )(is alive)/ON_LINE\;\1\;/;s/([[0-9.]+)( )(is unreachable)/OFFLINE\;\1\;/')
Tenho o IP é o STATUS, {ON_,OFF}LINE
Para filtrar o log, pode usar o grep, awk ou o sed

IMPORTANTE => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


9. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Héliton
helitonzor

(usa Fedora)

Enviado em 22/04/2019 - 22:49h

Esta como eu pretendia desde o começo, como eu estou fazendo um php ler o log e mostrar la no http os eventos vao se acumulando então eu teria q fazer um grep para filtrar esses eventos repitidos ?

EDIT: Estava fazendo uns teste, como precisaria de backup para esse log acaber fazendo ele copiar o conteudo do primeiro log para um segundo q inclui d-m-y, assim amontoando todos os eventos sendo bem desagradavel pois terei muitos bytes de documentos desnecessarios.


10. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/04/2019 - 23:55h


helitonzor escreveu:

Esta como eu pretendia desde o começo, como eu estou fazendo um php ler o log e mostrar la no http os eventos vao se acumulando então eu teria q fazer um grep para filtrar esses eventos repitidos ?

EDIT: Estava fazendo uns teste, como precisaria de backup para esse log acaber fazendo ele copiar o conteudo do primeiro log para um segundo q inclui d-m-y, assim amontoando todos os eventos sendo bem desagradavel pois terei muitos bytes de documentos desnecessarios.

Se não quer mostrar os repetidos, tem que fazer um filtro.

Não entendi essa parte:
EDIT: Estava fazendo uns teste, como precisaria de backup para esse log . . .

Quais são os "muitos bytes de documentos desnecessários"
amontoando Vc se refere a falta de - e espaços, é isso.....
Pode gerar a página html com um ShellScript..... É bem simples.....

VEJA => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver


11. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Héliton
helitonzor

(usa Fedora)

Enviado em 23/04/2019 - 00:03h

É q se deixar ele gerando uma linha nova toda vez q fazer a checagem sendo q nao preciso q ele refaça a linha se nao alterou a situação da conexao se deixar rodando por meses vai consumir muito espaço eu imagino, então o html pode filtrar esse log para mim?
EDIT:
Esse é o html que estou usando para ler o log
<html>
<meta http-equiv="refresh" content="5;">
<head>
<title>EVENTOS</title>
</head>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="0" class="a">
<tr>
<td class="a"><div align="center"><strong><h1>Processo Iniciado</h1></strong> </div></td>
</tr>
</table>
<body>
<?php
// Meu arquivo
$arquivo = 'conexao.txt';

// Cria o recurso (abrir o arquivo)
$handle = fopen( $arquivo, 'r' );

// Lê o arquivo (se existir)
$ler = fread( $handle, filesize($arquivo) );

// Mostra dados na tela
echo nl2br($ler);

// Fecha o arquivo
fclose($handle);
?>
</body>
</html>



12. Re: Fazer o script criar log somente quando a situação da conexão mudar !!

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 23/04/2019 - 01:08h

Para não ficar com um monte de informação INÚTIL, que eu tinha adotado o "LOG INICIAL"....
Daquela forma, teria apenas duas linhas por ip, independentemente se ficasse executando por um dia ou 10 anos.....
Ao meu ver, é muito mais fácil, para visualizar, duas linhas do que trocentas....
Filtro com PHP, sinceramente desconheço . . . .
Segue o print da pagina gerada pelo shellscript:
https://imgur.com/HRdiYOp
IMPORTANTE => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts