サーバーの死活監視スクリプトです。
サーバーにアクセスしエラーだったらメールで通知します。それを cron で定期的に実行します。
というような簡素な機能しかありませんが事足りることも多いので。
これまでは windows 上で同様のことをしておりました。特に不都合もなかったのですが環境自体もかなり古くなったこともありシェルスクリプトで作ってみました。
せっかくなので Docker Compose を使って最小限の記述をするだけで構築できる形にしています。
いろいろなサイトの情報を参考にさせてもらっています。ありがとうございます。
├ docker-compose.yml ├ Dockerfile └ cron.sh
version: '3' services: centos7: build: ./ volumes: - ./cron.sh:/opt/cron.sh environment: TZ: Asia/Tokyo container_name: "healthcheck-centos7" # restart: always
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
#!/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
(This host) = https://thinkridge.com