Продолжить поиск результатов трассировки в bash - PullRequest
0 голосов
/ 19 июня 2010

Каждую ночь я прохожу один и тот же процесс проверки отказоустойчивых систем для наших T1.Я, по сути, прошёл следующий процесс:

Запустить процесс восстановления после отказа.

traceroute $server;

Как только я увижу, что он вышел из строя, я проверяю, работают ли соединения по SSHing с сервером.1007 *

Затем, когда я вижу, что это работает, я снимаю его с аварийного переключения.

Итак, я хочу постоянно запускать трассировку до получения определенного результата, а затем запускать команду SSH.

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Думаю, вам лучше использовать команду ping для проверки доступности сервера, чем traceroute.

Легко проверить состояние возврата команды ping, даже не используя grep:

if [ ping -c 4 -n -q 10.10.10.10 >/dev/null 2>& ]; then
    echo "Server is ok"
else
    echo "Server is down"
fi

Если вы хотите сделать это постоянно в цикле, попробуйте это:

function check_ssh {
    # do your ssh stuff here
    echo "performing ssh test"
}
while : ; do
    if [ ping -c 4 -n -q 10.10.10.10 >/dev/null 2>& ]; then
        echo "Server is ok"
        check_ssh
    else
        echo "Server is down"
    fi
    sleep 60
done
1 голос
/ 19 июня 2010

Поместите ваш список успешных сообщений в файл (не указывайте переменные строки и дробные части строки и используйте ^, чтобы определить начало строки, как таковое):

patterns.list:

^ 7  4.68.63.165 
^ 8  4.68.17.133 
^ 9  4.79.168.210 
^10  216.239.48.108 
^11  66.249.94.46 
^12  72.14.204.99 

Затем простой цикл while:

while ! traceroute -n ${TARGET} | grep -f patterns.list
do
  sleep 5   # 5 second delay between traceroutes, for niceness.
done
ssh ${DESTINATION}

Используйте traceroute -n для генерации вывода, чтобы вы не получали IP-адрес, который разрешается один раз, а имя - следующее, что приводит к ложному срабатыванию.

...