나는 명백한 것을 놓치고 있지만 man [curl|wget]
Google에 성공하지 못했다는 느낌을 가지고 있습니다 ( “http”는 그러한 나쁜 검색어를 만듭니다). 자주 실패하는 웹 서버 중 하나에 대한 빠른 수정 프로그램을 찾고 있는데 오류 메시지와 함께 상태 코드 500을 반환합니다. 이 문제가 발생하면 다시 시작해야합니다.
근본 원인을 찾기 어려워 보이는 것처럼, 우리는 빠른 수정을 목표로하고 있습니다. 실제로 해결할 수있을 때까지 시간을 연결하기에 충분할 것으로 기대합니다 (서비스에는 고 가용성이 필요하지 않음)
제안 된 솔루션은 5 분마다 실행되는 cron 작업을 작성하여 http : // localhost : 8080 /을 확인하는 것 입니다. 상태 코드 500과 함께 반환되면 웹 서버가 다시 시작됩니다. 1 분 안에 서버가 다시 시작되므로 이미 실행중인 다시 시작을 확인할 필요가 없습니다.
문제의 서버는 현재 필요한 것을 실행하기에 충분한 패키지가 설치된 우분투 8.04 최소 설치입니다. bash에서 작업을 수행하는 데 필요한 요구 사항은 없지만 더 이상 인터프리터를 설치하지 않고도 최소한의 환경에서 실행하고 싶습니다.
(환경 변수에 http 상태 코드를 할당하는 명령 / 옵션이면 충분하다는 스크립팅에 충분히 익숙합니다. 이것은 내가 찾았고 찾을 수 없었습니다.)
답변
나는 이것을 500 코드에서 테스트하지는 않았지만 200, 302 및 404와 같은 다른 코드에서는 작동합니다.
response=$(curl --write-out '%{http_code}' --silent --output /dev/null servername)
–write-out에 제공된 형식은 따옴표로 묶어야합니다. @ibai가 제안한대로 --head
HEAD 전용 요청을 추가하십시오 . 페이지 내용이 전송되지 않기 때문에 검색이 성공할 때 시간이 절약됩니다.
답변
curl --write-out "%{http_code}\n" --silent --output /dev/null "$URL"
공장. 그렇지 않은 경우 코드 자체를 보려면 return 키를 눌러야합니다.
답변
나는 오늘 무언가를 빨리 시연해야했고 이것을 생각해 냈습니다. 누군가 OP의 요청과 비슷한 것이 필요하다면 여기에 배치 할 것이라고 생각했습니다.
#!/bin/bash
status_code=$(curl --write-out %{http_code} --silent --output /dev/null www.bbc.co.uk/news)
if [[ "$status_code" -ne 200 ]] ; then
echo "Site status changed to $status_code" | mail -s "SITE STATUS CHECKER" "my_email@email.com" -r "STATUS_CHECKER"
else
exit 0
fi
200에서 상태가 변경 될 때마다 이메일 알림을 보내므로 멍청하고 욕심이 많습니다. 이를 개선하기 위해 여러 상태 코드를 반복하고 결과에 따라 다른 작업을 수행하는 방법을 살펴 보겠습니다.
답변
만 허용 반응이 좋은 대답은, 그것은 실패 시나리오를 내려다보고 있습니다. 요청에 오류가 있거나 연결이 실패하면이 curl
반환 000
됩니다.
url='http://localhost:8080/'
status=$(curl --head --location --connect-timeout 5 --write-out %{http_code} --silent --output /dev/null ${url})
[[ $status == 500 ]] || [[ $status == 000 ]] && echo restarting ${url} # do start/restart logic
참고 : 이것은 요청 된 500
상태 확인을 약간 넘어서 curl
서버에 연결할 수도 있음을 확인 합니다 (예 🙂 000
.
그것으로부터 함수를 생성하십시오 :
failureCode() {
local url=${1:-http://localhost:8080}
local code=${2:-500}
local status=$(curl --head --location --connect-timeout 5 --write-out %{http_code} --silent --output /dev/null ${url})
[[ $status == ${code} ]] || [[ $status == 000 ]]
}
테스트 받기 500
:
failureCode http://httpbin.org/status/500 && echo need to restart
오류 / 연결 실패 테스트 (예 🙂 000
:
failureCode http://localhost:77777 && echo need to start
테스트를받지 못하는 경우 500
:
failureCode http://httpbin.org/status/400 || echo not a failure
답변
netcat 및 awk를 사용하면 서버 응답을 수동으로 처리 할 수 있습니다.
if netcat 127.0.0.1 8080 <<EOF | awk 'NR==1{if ($2 == "500") exit 0; exit 1;}'; then
GET / HTTP/1.1
Host: www.example.com
EOF
apache2ctl restart;
fi
답변
모든 요청에 대해 3XX 리디렉션을 따르고 응답 코드를 인쇄하려면 다음을 수행하십시오.
HTTP_STATUS="$(curl -IL --silent example.com | grep HTTP )";
echo "${HTTP_STATUS}";
답변
이것은 http 상태를 평가하는 데 도움이 될 수 있습니다
var=`curl -I http://www.example.org 2>/dev/null | head -n 1 | awk -F" " '{print $2}'`
echo http:$var