ヘルスチェック
「見たら動いていた」では足りない
ここまで、動いているかどうかは自分の目で確かめてきました。curl を打ち、返ってきた文字を読む。人がいる間はこれで十分です。
困るのは、人がいない時間です。夜中に落ちたサーバーは、朝まで誰にも気づかれません。必要なのは、人の代わりに見て、結果を残す仕組みです。
そのために、まず「生きている」を機械が判定できる形に落とします。
終了コードで判定する
シェルのコマンドは、終わるときに 0 から 255 の数を返します。0 が成功、それ以外が失敗です。この数は $? で読めます。
curl -skf https://localhost/ > /dev/null
echo $?
# 0-f が要点です。この指定を付けると、HTTP のステータスが 400 以上のとき curl 自身が失敗として終わります。付けないと、404 が返ってきても curl としては「取得に成功した」ので 0 を返します。死活判定で -f を落とすのは定番の失敗です。
判定に使う残りの指定は次のとおりです。
-s— 進捗表示を出さない-k— 自己署名証明書を受け入れる--max-time 5— 5秒で見切りをつける
最後の見切りが効きます。応答しないサーバーに繋ぎに行くと、指定しなければ長く待ち続けます。判定が返ってこないのは、失敗が返ってこないのと同じです。
if で分岐を書く
終了コードは if にそのまま渡せます。
if curl -skf --max-time 5 https://localhost/ > /dev/null; then
echo "OK"
else
echo "NG"
fiif は、続くコマンドの終了コードが 0 なら then を、そうでなければ else を実行します。他の言語のように真偽値を比べる必要はありません。コマンドの成否がそのまま条件になるのが、シェルの書き方です。
記録には時刻を必ず付ける
判定結果は追記していきます。
date '+%Y-%m-%d %H:%M:%S'
# 2026-08-08 12:00:00date は書式を指定できます。%Y が西暦、%m が月、%d が日、%H:%M:%S が時刻です。
書き込みは > ではなく >> を使います。> は毎回上書きなので、直前の1件しか残りません。いつから落ちていたのかは、履歴が無いと分かりません。
echo "$(date '+%Y-%m-%d %H:%M:%S') OK" >> /var/log/healthcheck.log1章から使ってきた $(...) は、中のコマンドの出力をその場に埋め込む書き方です。
スクリプトにまとめる
Linux 入門で作った backup.sh と同じ形にします。1行目の #!/bin/bash で、この中身を bash に読ませると宣言し、chmod +x で実行できるようにします。
次の章でこれをタイマーに繋ぎます。人が打たなくても、決まった間隔で回り続ける状態が、この2レッスンの行き先です。
手を動かす
サイトが 200 を返すかどうかで OK と NG を判定し、時刻つきで記録するスクリプトを書きます。