Table of contents
サーバーの死活監視スクリプトです。
サーバーにアクセスしエラーだったらメールで通知します。それを 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
Page Info | |
---|---|
Page Name : | 技術系備忘録/Docker/サーバー死活監視スクリプト |
Page aliases : | None |
Page owner : | takatsuka |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | No one |
Users : | No one |
Counter: 2582,
today: 3,
yesterday: 0
Princeps date: 2021-06-10 (Thu) 17:07:46
Last-modified: 2021-06-10 (Thu) 17:07:46 (JST) (1219d) by takatsuka