ページへ戻る

− Links

 印刷 

技術系備忘録​/Docker​/サーバー死活監視スクリプト のソース :: シンクリッジ

xpwiki:技術系備忘録/Docker/サーバー死活監視スクリプトのソース

« Prev[3]  
#contents
サーバーの死活監視スクリプトです。

サーバーにアクセスしエラーだったらメールで通知します。それを cron で定期的に実行します。
というような簡素な機能しかありませんが事足りることも多いので。

これまでは windows 上で同様のことをしておりました。特に不都合もなかったのですが環境自体もかなり古くなったこともありシェルスクリプトで作ってみました。
せっかくなので Docker Compose を使って最小限の記述をするだけで構築できる形にしています。

いろいろなサイトの情報を参考にさせてもらっています。ありがとうございます。

* docker-compose ファイル一覧 [#e07d882e]
 ├ docker-compose.yml
 ├ Dockerfile
 └ cron.sh

** docker-compose.yml [#t3e9ed12]
#prettify{{
version: '3'
services:
  centos7:
    build: ./
    volumes:
      - ./cron.sh:/opt/cron.sh
    environment:
      TZ: Asia/Tokyo
    container_name: "healthcheck-centos7"
#   restart: always
}}

** Dockerfile [#tb7c509e]
#prettify{{
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 [#kf8282c9]
#prettify{{
#!/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
}}

« Prev[3]