다음과 같은 쿼리를 모니터링하고 만들기 위한 스크립트를 만들었습니다.
httpUrl="http://some.website.ashx"
balExp=$(curl -v -X POST -d "UID=test&PWD=2222" $httpUrl)
쿼리가 아무것도 반환하지 않거나 시간이 초과된 경우 어떻게 이메일 알림(예: 내 이메일)을 보낼 수 있나요?
고쳐 쓰다:
쿼리를 실행하도록 스크립트를 수정했습니다.
if [ $balExp -eq 0 ]
echo "Success"
else
echo "failed"
fi
나는 항상 실패하지만 curl
명령은 성공(0)을 반환합니다.
답변1
실패한 HTTP 요청에 대한 Curl 종료 코드
일반적으로 요청된 HTTP 리소스를 사용할 수 없는 경우 웹 서버는 관련 HTTP 상태 코드(예: 404)에 해당하는 HTML 문서로 응답합니다. 이 경우, 컬은 서버로부터 문서를 받아들이고 웹 서버로부터 성공적으로 응답을 받았기 때문에 오류 문서를 표시하고 성공을 나타내기 위해 상태 0으로 종료됩니다.
curl
HTTP 리소스를 검색하는 데 문제가 있는 경우 오류 코드가 반환되기를 원합니다. 이렇게 하려면 -f, --fail
컬 옵션을 제공해야 합니다. 컬 매뉴얼 페이지에서:
서버 오류가 발생하면 자동으로 실패합니다(출력 없음). 이는 실패한 시도를 더 잘 처리하기 위해 스크립트 등을 더 잘 활성화하기 위해 주로 수행됩니다. 일반적인 상황에서 HTTP 서버가 문서를 전달할 수 없으면 상황을 설명하는 HTML 문서를 반환합니다(일반적으로 이유와 추가 정보도 설명). 이 플래그는 컬이 이 내용을 출력하지 못하게 하고 오류 22를 반환합니다.
이 방법은 안전하지 않으며 특히 인증이 관련된 경우 실패한 응답 코드(응답 코드 401 및 407)를 놓치는 경우가 있습니다.
노트:위의 내용은 (대부분) 내 답변에서 복사되었습니다.컬에 대한 비슷한 질문.
이메일을 보내
mail
이 프로그램을 사용하여 이메일을 보낼 수 있습니다 . Debian 기반 시스템에서는 소프트웨어 패키지를 통해 설치할 수 있지만 mailutils
Red Hat 기반 배포판에서는 소프트웨어 패키지를 통해 제공됩니다 mailx
.
echo "Body of email" | mail [email protected] -s "Subject line"
예를 들어 이미 명령줄 메일 클라이언트를 사용하고 있다면 다음을 mutt
사용할 수 있습니다.
echo "Body of email" | mutt [email protected] -s "Subject line"
명령이 성공했는지 테스트
test
명령의 출력을 테스트할 때 또는 를 사용할 필요가 없습니다 [
. 다음 스크립트와 같이 명령 출력을 간단히 사용할 수 있습니다(위의 모든 내용 포함).
httpUrl="http://some.website.ashx"
if balExp=$(curl -f -v -X POST -d "UID=test&PWD=2222" "$httpUrl"); then
echo "$balExp" | mail [email protected] -s "Successful download of $httpUrl"
else
echo "$balExp" | mail [email protected] -s "Problem downloading $httpUrl"
fi
$httpUrl
쉘에서 해석되는 문자( &
공통 문자) 를 포함할 수 있는 다른 URL과 함께 스크립트를 사용할 수 있도록 큰따옴표를 사용하여 쉘 변수를 인용했습니다 .
마지막으로 if
귀하의 질문에 해당하는 설명이 없습니다 then
.