Как выполнить один и тот же запрос на нескольких серверах через сервер переходов

У меня много серверов, таких как sdeuu1, sdeuu2, sdeuu3 и т. Д.

Я хочу выполнить запрос для каждого из них, и запрос:

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

этот запрос возвращает отличные результаты при запуске на отдельных серверах.

Теперь у меня есть один сервер с именем sdalp1, через который я могу подключиться по ssh к sdeuu1, 2, 3 и т. Д. И перейти на этот сервер для выполнения запроса. Теперь вместо этого я хочу запустить запрос из sdalp1 для всех серверов sdeuu за один раз, и я попробовал следующую команду и несколько других ее версий:

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

Но эта команда возвращает Ошибка для всех серверов выглядит следующим образом:

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

В чем здесь проблема, я не получаю, если это проблема с разрешениями?

1
задан 13 February 2013 в 13:09

1 ответ

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

Обратите внимание, что я добавил ssh $i в начало команды внутри цикла.

Я также добавил обратную косую черту (\) к символу канала (|), так что второй grep происходит на каждом отдельном сервере для эффективности. И затем мне также потребовалась обратная косая черта в конце этой строки для обозначения строки продолжения, так как символ «сбежавший канал» больше не делает этого. Когда вы вводите это, убедитесь, что после последней обратной косой черты не ставьте пробелы.

Если это сбивает с толку, вы также можете сделать это со всем в одной строке:

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

Если вы еще этого не сделали, вы можете настроить пароль без пароля ssh , чтобы вы могли не нужно вводить пароль для каждого сервера.

0
ответ дан 13 February 2013 в 13:09

Другие вопросы по тегам:

Похожие вопросы: