サーバーの死活監視スクリプトです。
サーバーにアクセスしエラーだったらメールで通知します。それを cron で定期的に実行します。
というような簡素な機能しかありませんが事足りることも多いので。
これまでは windows 上で同様のことをしておりました。特に不都合もなかったのですが環境自体もかなり古くなったこともありシェルスクリプトで作ってみました。
せっかくなので Docker Compose を使って最小限の記述をするだけで構築できる形にしています。
いろいろなサイトの情報を参考にさせてもらっています。ありがとうございます。
docker-compose.yml
version: '3' services: centos7: build: ./ volumes: - ./cron.sh:/opt/cron.sh environment: TZ: Asia/Tokyo container_name: "healthcheck-centos7" # restart: always
Dockerfile
FROM centos:centos7 RUN yum -y update # wget mailx cron インストール RUN yum -y install wget mailx cronie # .mailrc (SMTP) # 環境に合わせて記述してください RUN echo $'\n\ #set smtp-use-starttls\n\ set smtp=smtp://mail.example.com:587\n\ set smtp-auth=login\n\ set smtp-auth-user=info@example.com\n\ set smtp-auth-password=○○○○○○○\n\ set from="info@example.com"\n\ set ssl-verify=ignore\n\ ' > /root/.mailrc # 15分毎に cron.sh を実行します CMD chmod 744 /opt/cron.sh \ ; (echo "*/15 * * * * /opt/cron.sh > /dev/null 2>&1") | crontab - \ ; (crond -n &) \ ; sleep infinity
cron.sh
#!/bin/bash
items=(
# 以下に監視対象を記述してください
# 'チェックするURL | エラー発生メールの宛先'
'https://www.example.com/|rb20det@example.com'
'http://www2.example.com/|jzx80@example.com,ae86@example.com'
)
for item in ${items[@]}; do
IFS='|' read -r url mailto <<< "$item"
# wget でチェックし、200 以外はエラーとしています
result=`wget --spider -nv --timeout 30 -t 5 $url 2>&1`
ok=`echo "$result" | grep -c '200 OK'`
if [ $ok -eq 0 ]; then
subject="failed. ${url}"
echo $result | mailx -s "$subject" "$mailto"
fi
done| ぺージ情報 | |
|---|---|
| ぺージ名 : | 技術系備忘録/Docker/サーバー死活監視スクリプト |
| ページ別名 : | 未設定 |
| ページ作成 : | takatsuka |
| 閲覧可 | |
| グループ : | すべての訪問者 |
| ユーザー : | すべての訪問者 |
| 編集可 | |
| グループ : | なし |
| ユーザー : | なし |
Counter: 3302,
today: 2,
yesterday: 4
初版日時: 2021-06-10 (木) 17:07:46
最終更新: 2021-06-10 (木) 17:07:46 (JST) (1684d) by takatsuka
