Back to page

− Links

 Print 

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

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

Table of contents
  • docker-compose ファイル一覧
    • docker-compose.yml
    • Dockerfile
    • cron.sh

サーバーの死活監視スクリプトです。

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

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

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

docker-compose ファイル一覧 anchor.png[1]

├ docker-compose.yml
├ Dockerfile
└ cron.sh
Page Top

docker-compose.yml anchor.png[2]

version: '3'
services:
  centos7:
    build: ./
    volumes:
      - ./cron.sh:/opt/cron.sh
    environment:
      TZ: Asia/Tokyo
    container_name: "healthcheck-centos7"
#   restart: always
Page Top

Dockerfile anchor.png[3]

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
Page Top

cron.sh anchor.png[4]

#!/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

Last-modified: 2021-06-10 (Thu) 17:07:46 (JST) (1139d) by takatsuka