У меня такое ощущение, что мне не хватает очевидного, но я не справился с этим man [curl|wget]
или Google («http» делает такой плохой поисковый термин). Я ищу быстрое и грязное исправление для одного из наших веб-серверов, которое часто выходит из строя и возвращает код состояния 500 с сообщением об ошибке. Как только это произойдет, его нужно перезапустить.
Поскольку коренную причину, по-видимому, трудно найти, мы стремимся к быстрому исправлению, надеясь, что этого будет достаточно, чтобы преодолеть время, пока мы действительно не сможем это исправить (службе не нужна высокая доступность)
Предлагаемое решение заключается в создании задания cron, которое запускается каждые 5 минут, проверяя http: // localhost: 8080 / . Если это возвращается с кодом состояния 500, веб-сервер будет перезапущен. Сервер будет перезагружен через минуту, поэтому нет необходимости проверять перезапуски, которые уже запущены.
Рассматриваемый сервер представляет собой минимальную установку Ubuntu 8.04 с достаточным количеством установленных пакетов для запуска того, что ему нужно в данный момент. Для выполнения задачи в bash нет строгих требований, но я бы хотел, чтобы она работала в такой минимальной среде без установки дополнительных переводчиков.
(Я достаточно знаком со сценариями, что команды / опции для назначения кода состояния http переменной среды было бы достаточно - это то, что я искал и не мог найти.)
источник
response=$(curl --write-out \\n%{http_code} --silent --output - servername)
- последняя строка в результате будет код ответа.--insecure
.работает. Если нет, вы должны нажать кнопку возврата, чтобы просмотреть сам код.
источник
Мне нужно было что-то быстро показать сегодня и придумал это. Думаю, я бы разместил это здесь, если бы кому-то нужно что-то похожее на запрос ОП.
Это будет отправлять уведомление по электронной почте при каждом изменении состояния от 200, так что это глупо и потенциально жадно. Чтобы улучшить это, я бы посмотрел на циклический просмотр нескольких кодов состояния и выполнение различных действий в зависимости от результата.
источник
Хотя принятый ответ является хорошим ответом, он не учитывает сценарии сбоев.
curl
вернется,000
если в запросе произошла ошибка или произошел сбой соединения.Примечание: это выходит за рамки запрошенной
500
проверки статуса, чтобы также подтвердить, чтоcurl
можно даже подключиться к серверу (то есть возвратить000
).Создайте функцию из нее:
Тест получения
500
:Проверка получения ошибки / сбоя соединения (т.е.
000
):Тест не получен
500
:источник
С помощью netcat и awk вы можете обработать ответ сервера вручную:
источник
Чтобы выполнить перенаправления 3XX и распечатать коды ответов для всех запросов:
источник
grep
Будет захватывать все строки с «HTTP» в них. Может быть,grep -m 1 HTTP
только для получения первого совпадения, если это является намерением, или, может быть, вместо того, чтобы передать Awk, чтобы проанализировать только код результата.это может помочь оценить статус http
источник
head -n 1 | awk '{stuff}'
немного антипаттерн,awk 'NR==1 {stuff}'
делает то же самое в одном процессе, чистый Awk.Еще один вариант:
источник
Здесь идет скучный - но простой для понимания - скрипт, навеянный решением nicerobot , который запрашивает только заголовки ответа и избегает использования IFS, как предлагается здесь . Он выводит сообщение о сбое, когда встречает ответ> = 400. Этот эхо может быть заменен скриптом отказов.
источник
мне не понравились ответы, которые смешивают данные со статусом. нашел это: вы добавили флаг -f для сбоя curl и забрали код состояния ошибки из стандартного состояния var: $?
/unix/204762/return-code-for-curl-used-in-a-command-substitution
я не знаю, подходит ли он для каждого сценария здесь, но, кажется, он соответствует моим потребностям, и я думаю, что с ним намного легче работать
источник
Вот моя реализация, которая немного более многословна, чем некоторые из предыдущих ответов
источник
Чтобы добавить комментарий @DennisWilliamson выше:
Затем вы можете проанализировать код ответа из ответа, используя что-то вроде следующего, где X может означать регулярное выражение, чтобы отметить конец ответа (используя пример json здесь)
См. Удаление подстроки: http://tldp.org/LDP/abs/html/string-manipulation.html.
источник
echo
для получения окончательного значения? Простоcode=${response##*\}}
это проще и позволяет избежать ряда распространенных ошибок. Кроме того, это шаблон глобуса, а не правильное регулярное выражение.