特定のURLを呼び出してサービスのステータスを確認したいと思います。最も簡単な解決策は、cronを使用して毎分チェックすることです。エラーが発生した場合は、cronから電子メールを送信します。
これを達成するためにcUrlを試しましたが、エラーが発生したときにのみメッセージを出力することはできませんでした。出力を/ dev / nullに送信しようとすると、進行状況レポートが印刷されます。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5559 100 5559 0 0 100k 0 --:--:-- --:--:-- --:--:-- 106k
カールオプションを見てみましたが、成功したときに沈黙し、エラー時にノイズを発生させようとしている状況に適したものが見つかりませんでした。
私が望むことを行うためにカールを取得する方法や考慮すべき他のツールがありますか?
答え1
何について-sSf
?マニュアルページから:
-s/--silent Silent or quiet mode. Do not show progress meter or error messages. Makes Curl mute. -S/--show-error When used with -s it makes curl show an error message if it fails. -f/--fail (HTTP) Fail silently (no output at all) on server errors. This is mostly done to better enable scripts etc to better deal with failed attempts. In normal cases when a HTTP server fails to deliver a document, it returns an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22. This method is not fail-safe and there are occasions where non-successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).
たとえば、
curl -sSf http://example.org > /dev/null
答え2
サイトが生きていることを確認する最も簡単な方法は、次の方法を使用することです。
curl -Is http://www.google.com | head -n 1
が返されますHTTP/1.1 200 OK
。返された結果が出力と一致しない場合は、助けを求めてください。
答え3
カールからネットワークタイミング統計をキャプチャできます。要求/応答サイクル各ステップの待ち時間は、状態を確認するのに役立ちます。
$ URL=https://example.com
$ curl "$URL" -s -o /dev/null -w \
> "response_code: %{http_code}\n
> dns_time: %{time_namelookup}
> connect_time: %{time_connect}
> pretransfer_time: %{time_pretransfer}
> starttransfer_time: %{time_starttransfer}
> total_time: %{time_total}
> "
response_code: 200
dns_time: 0.029
connect_time: 0.046
pretransfer_time: 0.203
starttransfer_time: 0.212
total_time: 0.212
答え4
Curlには非常に具体的な終了ステータスコードがあります。
このコードを確認してください。
#!/bin/bash
##name: site-status.sh
FAIL_CODE=6
check_status(){
LRED="\033[1;31m" # Light Red
LGREEN="\033[1;32m" # Light Green
NC='\033[0m' # No Color
curl -sf "${1}" > /dev/null
if [ ! $? = ${FAIL_CODE} ];then
echo -e "${LGREEN}${1} is online${NC}"
else
echo -e "${LRED}${1} is down${NC}"
fi
}
check_status "${1}"
使用法:
$ site-status.sh example.com
結果:
$ example.com is online
メモ:
スクリプトはサイトを確認できますが、確認します。
ウェブサイトが機能するかどうかに興味がある場合は、このコードが役に立ちます。
ただし、if/else ブロックを一部変更すると、必要に応じて他のステータスコードを簡単にテストできます。