Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

1. Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Robson Saldanha
robsonsaldanha

(usa CentOS)

Enviado em 10/08/2021 - 20:07h

Olá, pessoal, tudo bem?
Então, primeiramente gostaria de informar que sou noob na utilização do Linux e não sou dev, mas estou estutando na prática e a grosso modo mesmo.

Trabalho para uma empresa na qual possui mais de 40 servidores, automatizei a verificação de espaço de HD's com um script que criei, bem básico, mas que me ajuda muito.

Mas estou estudando e aprimorando esse script cada vez mais, cheguei em uma parte no qual está muito difícil fazer o que quero, mas como um bom guerreiro, não quero desistir!

Gostaria da ajuda dos amigos, mas antes disso, enviei trecho do script para que possam entender:

#!/bin/bash
clear;
echo "------------------------------------------------"
echo "------- Rodar com VPN CONECTADA! -------";
echo "------------------------------------------------"
echo ;
echo ;
#pergunta se VPN está ligada.
echo "A VPN está conectada?";
echo "Digiite 1 para SIM";
echo "Ou qualquer tecla para NÃO";
read -r VPNOPEN;

if [[ "${VPNOPEN}" -eq "1" ]]
then

resultado()
{
df_ph='date; echo; df -Ph | head -n2';
}
resultado;
clear;

echo "###################################################"
echo "### SCRIPT DE ESPAÇOS PRINCIPAIS NOS SERVIDORES ###"
echo "###################################################"
date ;
echo ;
echo ;

rodar_script()
{
nuvem()
{

server1()
{
echo "------------------------------------------------";
echo ;
primeiro_server="192.168.0.100 -p 22100";
echo "Acessando Primeiro SERVER";
echo "Endereço: ${primeiro_server}";
echo ;
ssh robson@${primeiro_server} "${df_ph}";
echo ;
echo ;
echo ;
}
server1;

server2()
{
echo "------------------------------------------------";
echo ;
segundo_server1="192.168.0.101 -p 22101";
segundo_server2="192.168.0.102 -p 22101";
echo "Acessando Segundo SERVER";
echo "Acesso 1:"
echo "Endereço: ${segundo_server1}";
echo ;
ssh robson@${segundo_server1} "${df_ph}";
echo ;
echo ;
echo "Acesso 2:"
echo "Endereço: ${segundo_server2}";
echo ;
ssh robson@${segundo_server2} "${df_ph}";
echo ;
echo ;
echo ;
}
server2;
}
nuvem;
}
rodar_script;

else

echo "!!! ALERTA !!!";
echo "Volte apenas quando a VPN estiver conectada";
echo "!!! ALERTA !!!";

exit;


fi



exit;


Como é possível ver, não sou experiênte e não é a maneira correta, por que estou entrando em vários servidores dessa forma, então o meu códiigo total deu umas 1400 linhas, mas sei que dá pra reduzir isso, só ainda não consegui.

Preciso criar um arquivo que também pode ser shell ou até mesmo txt, esse arquivo servirá como uma lista de servidores, por que dependendo dos clientes que contratam nossos serviços, precisamos adicionar mais servidores, ou remover servidores dessa lista, essa lista vai conter os acessos de cada cliente, contendo ip/dns e porta ssh. Gostaria que o meu script de análise, acessasse esse arquivo e rodasse o comando em cada servidor dessa lista, e printasse o resultado e salvasse em um outro arquivo log_hd.txt por exemplo. Porém, existem alguns servidores em que pode haver a troca de link, então tenho servidores com até 3 ips diferentes, precisaria que se não acessar no primeiro IP, vá para o segundo e se o mesmo não acessar, fosse então para o terceiro.

Eu sei que usando o While, poderia trabalhar com "contadores", então fazendo a contagem dos servidores +1 por exemplo, iria executar o comando novamente (em outro servidor é claro), porém, como preciso declarar o endereço do servidor na varíavel, fiquei perdido em como fazer pra rodar da melhor maneira esse script.

Alguém conseguiria me ajudar? Obrigado amigos!


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/08/2021 - 00:00h

robsonsaldanha escreveu:


msoliver escreveu:

robsonsaldanha escreveu:

Olá!
Muito obrigado pela resposta, eu vou tentar e assim que testar, vou responder aqui, mas ainda sim estou com dúvidas em como fazer,
mas primeiro quero tentar fazer, pra entender onde está a dúvida em si.
Por ora, agradeço de verdade!

Ok Robson fico no aguardo.
A intenção é que você aprenda.
Se achar necessário, poste as duvidas....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________


Olá, tudo bem?
Novamente vou abusar do teu conhecimento.

Nesse txt que vou colocar todos os servidores, posso usar o formato:
nome_do_servidor:ip01:ip02:porta
?

Boa noite Robson.
Não tinha pensado no nome do server, mas pode ser, sem problemas....
A lógica é a seguinte:
Leia a linha, gerando uma matriz,
Isso devido ao cado de servidores que tem mais de um IP.

matriz[0] => Nome do Server
matriz[1] => Ip (1º ou único)
#Ultima matriz será sempre a porta.
porta=${mtz[$((${#mtz[@]}-1))]}; #ULTIMA Matriz, que é a quantidade menos um.

O laço abaixo, "varre" o arquivo linha a linha, e, para cada linha, gera as variáveis.
while IFS=$'\n' IFS=":" read -a mtz;do
#Qtdd de campos => ${#mtz[@]}
#Dentro deste laço, faça o necessário . . .
# neste ponto sugiro um teste de conectividade , resumindo, um ping,
#se OK, conecta, senão, busca por outro IP desse servidor

#Conecte via ssh,
#Gere um arquivo com os resultados,
#Conecte via scp, e envie o arquivo gerado para o seu micro,
#Encerre essa conexão,
Próximo Servidor.... E assim até o fim do arquivo de texto...
done<arq_servidores.txt


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________


3. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 10/08/2021 - 20:55h

Se tem alguém aqui no VOL que pode te ajudar, é esse:
https://www.vivaolinux.com.br/~msoliver



4. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/08/2021 - 22:47h


robsonsaldanha escreveu:

Olá, pessoal, tudo bem?
Então, primeiramente gostaria de informar que sou noob na utilização do Linux e não sou dev, mas estou estutando na prática e a grosso modo mesmo.

Trabalho para uma empresa na qual possui mais de 40 servidores, automatizei a verificação de espaço de HD's com um script que criei, bem básico, mas que me ajuda muito.

Mas estou estudando e aprimorando esse script cada vez mais, cheguei em uma parte no qual está muito difícil fazer o que quero, mas como um bom guerreiro, não quero desistir!

Gostaria da ajuda dos amigos, mas antes disso, enviei trecho do script para que possam entender:

#!/bin/bash
clear;
echo "------------------------------------------------"
echo "------- Rodar com VPN CONECTADA! -------";
echo "------------------------------------------------"
echo ;
echo ;
#pergunta se VPN está ligada.
echo "A VPN está conectada?";
echo "Digiite 1 para SIM";
echo "Ou qualquer tecla para NÃO";
read -r VPNOPEN;

if [[ "${VPNOPEN}" -eq "1" ]];then
resultado(){
df_ph='date; echo; df -Ph | head -n2';
}
resultado;
clear;

echo "###################################################"
echo "### SCRIPT DE ESPAÇOS PRINCIPAIS NOS SERVIDORES ###"
echo "###################################################"
date ;
echo ;
echo ;

rodar_script() {
nuvem(){
server1() {
echo "------------------------------------------------";
echo ;
primeiro_server="192.168.0.100 -p 22100";
echo "Acessando Primeiro SERVER";
echo "Endereço: ${primeiro_server}";
echo ;
ssh robson@${primeiro_server} "${df_ph}";
echo ;
echo ;
echo ;
}
server1;

server2()
{
echo "------------------------------------------------";
echo ;
segundo_server1="192.168.0.101 -p 22101";
segundo_server2="192.168.0.102 -p 22101";
echo "Acessando Segundo SERVER";
echo "Acesso 1:"
echo "Endereço: ${segundo_server1}";
echo ;
ssh robson@${segundo_server1} "${df_ph}";
echo ;
echo ;
echo "Acesso 2:"
echo "Endereço: ${segundo_server2}";
echo ;
ssh robson@${segundo_server2} "${df_ph}";
echo ;
echo ;
echo ;
}
server2;
}
nuvem;
}
rodar_script;

else

echo "!!! ALERTA !!!";
echo "Volte apenas quando a VPN estiver conectada";
echo "!!! ALERTA !!!";

exit;


fi



exit;


Como é possível ver, não sou experiente e não é a maneira correta, por que estou entrando em vários servidores dessa forma, então o meu códiigo total deu umas 1400 linhas, mas sei que dá pra reduzir isso, só ainda não consegui.

Preciso criar um arquivo que também pode ser shell ou até mesmo txt, esse arquivo servirá como uma lista de servidores, por que dependendo dos clientes que contratam nossos serviços, precisamos adicionar mais servidores, ou remover servidores dessa lista, essa lista vai conter os acessos de cada cliente, contendo ip/dns e porta ssh.
Gostaria que o meu script de análise, acessasse esse arquivo e rodasse o comando em cada servidor dessa lista, e printasse o resultado e salvasse em um outro arquivo log_hd.txt por exemplo.
Porém, existem alguns servidores em que pode haver a troca de link, então tenho servidores com até 3 ips diferentes, precisaria que se não acessar no primeiro IP, vá para o segundo e se o mesmo não acessar, fosse então para o terceiro.

Eu sei que usando o While, poderia trabalhar com "contadores", então fazendo a contagem dos servidores +1 por exemplo, iria executar o comando novamente (em outro servidor é claro), porém, como preciso declarar o endereço do servidor na variável, fiquei perdido em como fazer pra rodar da melhor maneira esse script.

Alguém conseguiria me ajudar?
Obrigado amigos!


Boa noite robsonsaldanha.
Crie um arquivo txt, contendo os dados dos servidores, em cada linha.
Percorra esse txt, "pegue" o IP, e execute o necessário....
Caso tenha Vários Ips para o mesmo server,
tipo:
segundo_server1="192.168.0.101 -p 22101";
segundo_server2="192.168.0.102 -p 22101";
Coloque no arquivo txt da seguinte forma:
ip01:ip02:porta

E, verifique essa condição na leitura de cada linha do arquivo....

Utilize array para obtenção das variáveis na 'linha do arquivo'
---------------------------------------------------------------------------------------
Reveja seu script:
Funções não ficam dentro do condicional, ficam no inicio do script.....
Fiz umas alterações, está com pouco mais de 40 linhas.....
Evite essa sequencia de 'echos'....
Use:
echo -e "alguma coisa\noutra coisa\nblablablabla\n......"
ou printf "alguma coisa\noutra coisa\nblablablabla\n......"

Qquer duvida, poste....



______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
______________________________________________________________________



5. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/08/2021 - 23:15h


Buckminster escreveu:

Se tem alguém aqui no VOL que pode te ajudar, é esse:
https://www.vivaolinux.com.br/~msoliver

Rsrsrsrsrsrs......
Estava checando o "script"......


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________



6. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Robson Saldanha
robsonsaldanha

(usa CentOS)

Enviado em 11/08/2021 - 19:06h


msoliver escreveu:


robsonsaldanha escreveu:

Olá, pessoal, tudo bem?
Então, primeiramente gostaria de informar que sou noob na utilização do Linux e não sou dev, mas estou estutando na prática e a grosso modo mesmo.

Trabalho para uma empresa na qual possui mais de 40 servidores, automatizei a verificação de espaço de HD's com um script que criei, bem básico, mas que me ajuda muito.

Mas estou estudando e aprimorando esse script cada vez mais, cheguei em uma parte no qual está muito difícil fazer o que quero, mas como um bom guerreiro, não quero desistir!

Gostaria da ajuda dos amigos, mas antes disso, enviei trecho do script para que possam entender:

#!/bin/bash
clear;
echo "------------------------------------------------"
echo "------- Rodar com VPN CONECTADA! -------";
echo "------------------------------------------------"
echo ;
echo ;
#pergunta se VPN está ligada.
echo "A VPN está conectada?";
echo "Digiite 1 para SIM";
echo "Ou qualquer tecla para NÃO";
read -r VPNOPEN;

if [[ "${VPNOPEN}" -eq "1" ]];then
resultado(){
df_ph='date; echo; df -Ph | head -n2';
}
resultado;
clear;

echo "###################################################"
echo "### SCRIPT DE ESPAÇOS PRINCIPAIS NOS SERVIDORES ###"
echo "###################################################"
date ;
echo ;
echo ;

rodar_script() {
nuvem(){
server1() {
echo "------------------------------------------------";
echo ;
primeiro_server="192.168.0.100 -p 22100";
echo "Acessando Primeiro SERVER";
echo "Endereço: ${primeiro_server}";
echo ;
ssh robson@${primeiro_server} "${df_ph}";
echo ;
echo ;
echo ;
}
server1;

server2()
{
echo "------------------------------------------------";
echo ;
segundo_server1="192.168.0.101 -p 22101";
segundo_server2="192.168.0.102 -p 22101";
echo "Acessando Segundo SERVER";
echo "Acesso 1:"
echo "Endereço: ${segundo_server1}";
echo ;
ssh robson@${segundo_server1} "${df_ph}";
echo ;
echo ;
echo "Acesso 2:"
echo "Endereço: ${segundo_server2}";
echo ;
ssh robson@${segundo_server2} "${df_ph}";
echo ;
echo ;
echo ;
}
server2;
}
nuvem;
}
rodar_script;

else

echo "!!! ALERTA !!!";
echo "Volte apenas quando a VPN estiver conectada";
echo "!!! ALERTA !!!";

exit;


fi



exit;


Como é possível ver, não sou experiente e não é a maneira correta, por que estou entrando em vários servidores dessa forma, então o meu códiigo total deu umas 1400 linhas, mas sei que dá pra reduzir isso, só ainda não consegui.

Preciso criar um arquivo que também pode ser shell ou até mesmo txt, esse arquivo servirá como uma lista de servidores, por que dependendo dos clientes que contratam nossos serviços, precisamos adicionar mais servidores, ou remover servidores dessa lista, essa lista vai conter os acessos de cada cliente, contendo ip/dns e porta ssh.
Gostaria que o meu script de análise, acessasse esse arquivo e rodasse o comando em cada servidor dessa lista, e printasse o resultado e salvasse em um outro arquivo log_hd.txt por exemplo.
Porém, existem alguns servidores em que pode haver a troca de link, então tenho servidores com até 3 ips diferentes, precisaria que se não acessar no primeiro IP, vá para o segundo e se o mesmo não acessar, fosse então para o terceiro.

Eu sei que usando o While, poderia trabalhar com "contadores", então fazendo a contagem dos servidores +1 por exemplo, iria executar o comando novamente (em outro servidor é claro), porém, como preciso declarar o endereço do servidor na variável, fiquei perdido em como fazer pra rodar da melhor maneira esse script.

Alguém conseguiria me ajudar?
Obrigado amigos!


Boa noite robsonsaldanha.
Crie um arquivo txt, contendo os dados dos servidores, em cada linha.
Percorra esse txt, "pegue" o IP, e execute o necessário....
Caso tenha Vários Ips para o mesmo server,
tipo:
segundo_server1="192.168.0.101 -p 22101";
segundo_server2="192.168.0.102 -p 22101";
Coloque no arquivo txt da seguinte forma:
ip01:ip02:porta

E, verifique essa condição na leitura de cada linha do arquivo....

Utilize array para obtenção das variáveis na 'linha do arquivo'
---------------------------------------------------------------------------------------
Reveja seu script:
Funções não ficam dentro do condicional, ficam no inicio do script.....
Fiz umas alterações, está com pouco mais de 40 linhas.....
Evite essa sequencia de 'echos'....
Use:
echo -e "alguma coisa\noutra coisa\nblablablabla\n......"
ou printf "alguma coisa\noutra coisa\nblablablabla\n......"

Qquer duvida, poste....



______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
______________________________________________________________________



Olá!
Muito obrigado pela resposta, eu vou tentar e assim que testar, vou responder aqui, mas ainda sim estou com dúvidas em como fazer, mas primeiro quero tentar fazer, pra entender onde está a dúvida em si.

Por ora, agradeço de verdade!





7. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Leandro Silva
LSSilva

(usa Outra)

Enviado em 11/08/2021 - 19:35h

Configura um Zabbix, vai poder monitorar muito mais "features" com nível de complexidade mais baixo e será mais fácil de manter também!


8. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 11/08/2021 - 22:33h

robsonsaldanha escreveu:

Olá!
Muito obrigado pela resposta, eu vou tentar e assim que testar, vou responder aqui, mas ainda sim estou com dúvidas em como fazer,
mas primeiro quero tentar fazer, pra entender onde está a dúvida em si.
Por ora, agradeço de verdade!

Ok Robson fico no aguardo.
A intenção é que você aprenda.
Se achar necessário, poste as duvidas....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



9. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Robson Saldanha
robsonsaldanha

(usa CentOS)

Enviado em 12/08/2021 - 20:52h


LSSilva escreveu:

Configura um Zabbix, vai poder monitorar muito mais "features" com nível de complexidade mais baixo e será mais fácil de manter também!


Olá @LSSilva tudo bem contigo?
Primeiramente, muito obrigado pela dica.

Já temos um zabbix, porém, como não sou o responsável pelo mesmo, não tenho acesso as funções dele,também acontece que temos um intranet, a minha ideia é que esse intranet colete informações da crond que vai rodar esse script depois de pronto.




10. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Robson Saldanha
robsonsaldanha

(usa CentOS)

Enviado em 12/08/2021 - 20:59h


msoliver escreveu:

robsonsaldanha escreveu:

Olá!
Muito obrigado pela resposta, eu vou tentar e assim que testar, vou responder aqui, mas ainda sim estou com dúvidas em como fazer,
mas primeiro quero tentar fazer, pra entender onde está a dúvida em si.
Por ora, agradeço de verdade!

Ok Robson fico no aguardo.
A intenção é que você aprenda.
Se achar necessário, poste as duvidas....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________


Olá, tudo bem?
Novamente vou abusar do teu conhecimento.

Nesse txt que vou colocar todos os servidores, posso usar o formato:
nome_do_servidor:ip01:ip02:porta
?




11. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Robson Saldanha
robsonsaldanha

(usa CentOS)

Enviado em 13/08/2021 - 20:53h


msoliver escreveu:

robsonsaldanha escreveu:


msoliver escreveu:

robsonsaldanha escreveu:

Olá!
Muito obrigado pela resposta, eu vou tentar e assim que testar, vou responder aqui, mas ainda sim estou com dúvidas em como fazer,
mas primeiro quero tentar fazer, pra entender onde está a dúvida em si.
Por ora, agradeço de verdade!

Ok Robson fico no aguardo.
A intenção é que você aprenda.
Se achar necessário, poste as duvidas....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________


Olá, tudo bem?
Novamente vou abusar do teu conhecimento.

Nesse txt que vou colocar todos os servidores, posso usar o formato:
nome_do_servidor:ip01:ip02:porta
?

Boa noite Robson.
Não tinha pensado no nome do server, mas pode ser, sem problemas....
A lógica é a seguinte:
Leia a linha, gerando uma matriz,
Isso devido ao cado de servidores que tem mais de um IP.

matriz[0] => Nome do Server
matriz[1] => Ip (1º ou único)
#Ultima matriz será sempre a porta.
porta=${mtz[$((${#mtz[@]}-1))]}; #ULTIMA Matriz, que é a quantidade menos um.

O laço abaixo, "varre" o arquivo linha a linha, e, para cada linha, gera as variáveis.
while IFS=$'\n' IFS=":" read -a mtz;do
#Qtdd de campos => ${#mtz[@]}
#Dentro deste laço, faça o necessário . . .
# neste ponto sugiro um teste de conectividade , resumindo, um ping,
#se OK, conecta, senão, busca por outro IP desse servidor

#Conecte via ssh,
#Gere um arquivo com os resultados,
#Conecte via scp, e envie o arquivo gerado para o seu micro,
#Encerre essa conexão,
Próximo Servidor.... E assim até o fim do arquivo de texto...
done<arq_servidores.txt


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________


Amigo... você é um gênio!

Valeu pelo help! :D
+1 fã! :D obrigado de coração !


12. Re: Ajuda com script para automatizar entrada em vários servidores e rodar df -Ph [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/08/2021 - 21:01h

Boa noite Robson,
bom que deu certo.....
Poste o seu script....
Só faltou marcar A MELHOR RESPOSTA..... :)
-------------------------------------------
<b>Editado. CORREÇÃO:</b>
<codewhile IFS=":" read -a mtz;do
#Qtdd de campos => ${#mtz[@]}
#Dentro deste laço, faça o necessário . . .
done<arq_servidores.txt</code>

Obs.: Tinha um "IFS=$'\n'", sobrando...

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________

______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts