Como executar a mesma consulta em vários servidores através do servidor de salto

1

Eu tenho muitos servidores como sdeuu1, sdeuu2, sdeuu3, etc.

Eu quero executar uma consulta em cada um deles e a consulta é:

grep -i 'SponsoredLinksIFrame.jsp' /home/nextag/httpd_logs/access_log.1360* | 
  grep -ic 'nextag.co.uk'

esta consulta está retornando resultados perfeitos quando executada em servidores separados.

Agora eu tenho um servidor chamado sdalp1 através do qual eu posso ssh para sdeuu1, 2, 3 etc. e ir para esse servidor para executar a consulta. Agora, em vez de fazer isso, quero executar a consulta de sdalp1 para todos os servidores sdeuu de uma só vez e eu tentei o seguinte comando e algumas outras versões dele:

for i in sdeuu1 sdeuu2 sdeuu3 sdeuu4 sdeuu5      \
         sdeuu6 sdeuu7 sdeuu8 sdeuu9 sdeuu10     \
         sdeuu11 sdeuu12 sdeuu13 sdeuu14 sdeuu15 \
         sdeuu16 sdeuu17 sdeuu18; do 
  grep -i 'SponsoredLinksIFrame.jsp' /home/nextag/httpd_logs/access_log.1360* | 
    grep -ic 'nextag.co.uk'"
  echo $i
done

Mas este comando está retornando um erro para todos os servidores da seguinte forma:

-bash: grep -i 'SponsoredLinksIFrame.jsp' /home/nextag/httpd_logs/access_log.1360* | grep -ic 'nextag.co.uk': No such file or directory 

Qual é o problema aqui, não estou conseguindo se isso for um problema com permissões?

    
por vipin8169 12.02.2013 / 12:52

1 resposta

2
for i in sdeuu1 sdeuu2 sdeuu3 sdeuu4 sdeuu5      \
         sdeuu6 sdeuu7 sdeuu8 sdeuu9 sdeuu10     \
         sdeuu11 sdeuu12 sdeuu13 sdeuu14 sdeuu15 \
         sdeuu16 sdeuu17 sdeuu18; do 
  ssh $i grep -i 'SponsoredLinksIFrame.jsp' /home/nextag/httpd_logs/access_log.1360* \| \
    grep -ic 'nextag.co.uk'
  echo $i
done

Observe que adicionei ssh $i ao início do comando dentro do loop.

Eu também adicionei uma barra invertida ( \ ) ao símbolo de pipe ( | ), para que o segundo grep aconteça em cada servidor individual para eficiência. E também precisei de uma barra invertida no final dessa linha para indicar uma linha de continuação, já que o símbolo de tubo de escape não faz mais isso. Quando você digitar isso, certifique-se de não colocar nenhum espaço após a última barra invertida.

Se isso é confuso, você também pode fazer isso com tudo em uma linha:

for i in sdeuu1 sdeuu2 sdeuu3 sdeuu4 sdeuu5      \
         sdeuu6 sdeuu7 sdeuu8 sdeuu9 sdeuu10     \
         sdeuu11 sdeuu12 sdeuu13 sdeuu14 sdeuu15 \
         sdeuu16 sdeuu17 sdeuu18; do 
  ssh $i grep -i 'SponsoredLinksIFrame.jsp' /home/nextag/httpd_logs/access_log.1360* \| grep -ic 'nextag.co.uk'
  echo $i
done

Se você ainda não o fez, pode configurar o login ssh sem senha para não precisar digitar uma senha para cada servidor.

    
por Robie Basak 13.02.2013 / 10:47