毎時1分に動くジョブで特定のサーバにアクセスがあった場合にapacheのアクセスログから拾いメールを発報する監視スクリプトをシェルで作成したいのですが行き詰っています。
以下の3点を追加で実装したいのですがアドバイスをお願いできますでしょうか。
- access="${start_date}~${end_date}"とaccess+=" ${j} acccess :${result}件"の間に改行を入れたい。
- 今の実装だとhost変数に複数のIPを入れると入れた数だけのメールが発報されてしまうため1通にまとめたい。
- ログのローテートが24:00に行われるため23:00~23:59のログは1日前のログから拾いたい。
bash
1#!/bin/bash 2from="xxxx@xxxx" 3address="xxxx@xxxx" 4host='111.11.111.11 222.22.222.22' 5end_date=`LANG=en_US.UTF-8 date "+%d/%b/%Y:%H:%M:%S"` 6start_date=`LANG=en_US.UTF-8 date -d '60 minutes ago' "+%d/%b/%Y:%H:%M:%S"` 7date=`date "+%Y-%m-%d"` 8accesslog="/apache/logs/access_log.$date" 9 10for j in $host 11do 12result=`ssh $j grep -v *.txt $accesslog | awk -F '\[\\\[\\\]\]' -v "end=$end_date" -v "start=$start_date" 'start < $2 && $2 <= end' 2> /dev/null | wc -l` 13 14 if [ $result -gt 0 ]; then 15 access="${start_date}~${end_date}" 16 access+=" ${j} acccess :${result}件" 17 18 subject='access' 19 20 /usr/sbin/sendmail -t << mailbody 21Subject: $subject 22From: $from 23To: $address 24 25$sry_access 26mailbody 27 28 fi 29done
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/26 02:59