Захватите возвращаемый тип ошибки (500 503 402 и т. Д.) И добавьте, что в сообщении

Как сделать этот скрипт для захвата возвращаемого типа ошибки (500 503 402 и т. д.) и добавить это в сообщение?

#!/bin/bash hostlist=(s-example1.us s-example.2.us) for host in "${hostlist[@]}"; do if nc -w 2 -z $host 80; then echo "INFO: ssh on $host responding [Looks Good]" else echo "ERROR: ssh on $host not responding[Ooops something went wrong]" fi done
0
задан 16 June 2017 в 19:09

4 ответа

$? содержит код состояния последнего запуска команды. Таким образом, вы можете изменить свой блок else:

else LAST_STATUS_CODE=$? # save the status code immediately, we don't want to accidentally overwrite it echo "ERROR: ssh on $host not responding[Ooops something went wrong]" echo "status code: $LAST_STATUS_CODE" fi
1
ответ дан 18 July 2018 в 11:34

Кажется, вы смешиваете SSH, HTTP, статус выхода и коды состояния HTTP. Если вам нужны коды состояния HTTP, используйте что-то вроде curl:

$ curl -LI google.com -s | grep 'HTTP/' HTTP/1.1 302 Found HTTP/1.1 200 OK

Тогда:

#!/bin/bash hostlist=(s-colin.coverhound.us s-joe.coverhound.us) for host in "${hostlist[@]}"; do status=$(curl -LI "$host" -s | grep 'HTTP/') if [[ $status == *"200 OK"* ]]; then echo "INFO: HTTP on $host responding [Looks Good]" else echo "ERROR: HTTP on $host not responding [Ooops something went wrong]" printf "%s\n" "$status" fi done

Итак, с hostlist=(google.com/teapot) я бы получил:

ERROR: HTTP on $host not responding [Ooops something went wrong] HTTP/1.1 301 Moved Permanently HTTP/1.1 418 I'm a Teapot
1
ответ дан 18 July 2018 в 11:34

$? содержит код состояния последнего запуска команды. Таким образом, вы можете изменить свой блок else:

else LAST_STATUS_CODE=$? # save the status code immediately, we don't want to accidentally overwrite it echo "ERROR: ssh on $host not responding[Ooops something went wrong]" echo "status code: $LAST_STATUS_CODE" fi
1
ответ дан 24 July 2018 в 19:49

Кажется, вы смешиваете SSH, HTTP, статус выхода и коды состояния HTTP. Если вам нужны коды состояния HTTP, используйте что-то вроде curl:

$ curl -LI google.com -s | grep 'HTTP/' HTTP/1.1 302 Found HTTP/1.1 200 OK

Тогда:

#!/bin/bash hostlist=(s-colin.coverhound.us s-joe.coverhound.us) for host in "${hostlist[@]}"; do status=$(curl -LI "$host" -s | grep 'HTTP/') if [[ $status == *"200 OK"* ]]; then echo "INFO: HTTP on $host responding [Looks Good]" else echo "ERROR: HTTP on $host not responding [Ooops something went wrong]" printf "%s\n" "$status" fi done

Итак, с hostlist=(google.com/teapot) я бы получил:

ERROR: HTTP on $host not responding [Ooops something went wrong] HTTP/1.1 301 Moved Permanently HTTP/1.1 418 I'm a Teapot
1
ответ дан 24 July 2018 в 19:49
  • 1
    Огромное спасибо. Но скрипт также выдает сообщение «$ host not replying» для рабочего (хорошего состояния) сервера. Он ищет условие if и печатает сообщение «$ host not replying» для всех серверов. – Suresh Ravi 16 June 2017 в 23:22
  • 2
    @SureshRavi ouch, я тестировал переменную host вместо status. Починил это. – muru 17 June 2017 в 07:50

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

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