1: 2021-06-10 (木) 16:01:13 takatsuka[5] [6] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | #contents | ||
+ | サーバーの死活監視スクリプトです。 | ||
+ | 定期的にサーバーにアクセスし、エラーだったらメールで通知します。 | ||
+ | というような簡素な機能しかありませんが事足りることも多いので。 | ||
+ | |||
+ | これまでは windows 上で同様のことをしておりました。特に不都合もなかったのですが環境自体もかなり古いものだったのでシェルスクリプトで作ってみました。 | ||
+ | せっかくなので Docker Compose を使って最小限の記述をするだけでOKの形にしています。 | ||
+ | |||
+ | いろいろなサイトの情報を参考にさせてもらっています。ありがとうございます。 | ||
+ | |||
+ | * 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-ssl\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 でチェックしています。不都合あれば適宜変更して下さい | ||
+ | result=`wget --spider -nv --timeout 30 -t 5 $url 2>&1` | ||
+ | # 200 以外はエラーとしています。不都合あれば適宜変更して下さい | ||
+ | ok=`echo "$result" | grep -c '200 OK'` | ||
+ | if [ $ok -eq 0 ]; then | ||
+ | subject="failed. ${url}" | ||
+ | echo $result | mailx -s "$subject" "$mailto" | ||
+ | fi | ||
+ | done | ||
+ | }} |
(This host) = https://thinkridge.com