|
写了一个shell版mini监控脚本,纯属跟大家分享学习下,有兴趣学习shell的可以看下。(*_*)
总共3个脚本文件service.sh, daemon.sh ,tcp.sh
实现了一些基本功能:端口监控,存活监控,掉线邮件报警,重新上线邮件通知
将3个文件放在同个目录下
设置:在tcp.sh中可以设置邮件通知地址,与邮件通频率次数
运行: ./service.sh start
主要文件代码如下:
tcp.sh文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
| #!/bin/bash
LANG=C
#邮件地址设置
fromaddress="obs01@test.com.cn" #From地址
toaddress="xjkong@test.com.cn" #发送地址
ccaddress="mymon@test.com.cn" #抄送地址
#邮件报警从复次数
remun=2
#被监控服务器、端口列表
server_all_list=(\
192.168.70.25:2004 \
192.168.70.24:80 \
192.168.16.56:80 \
)
#################################################################
#采用mail决定发送报警消息。
send_msg()
{
/bin/grep "$server_ip" mun.tmp > /dev/null 2>&1
if [ $? -eq 0 ]
then
mun=$(grep "$server_ip" mun.tmp | awk -F ':' '{print $2}')
if [ $mun -lt $remun ];then
echo "$messages" | mail -c $ccaddress -s "$server_ip is down" $toaddress -- -f $fromaddress
newmun=$[$mun + 1]
/bin/sed -i 's/'$server_ip':'$mun'/'$server_ip':'$newmun'/g' mun.tmp
fi
else
echo "$server_ip:1" >> mun.tmp
echo "$messages" | mail -c $ccaddress -s "$server_ip is down" $toaddress -- -f $fromaddress
# echo "$messages"
# echo "$server_ip"
fi
}
#重置邮件已发送次数记录
reset_mun()
{
/bin/sed -i '/'$server_ip'/d' mun.tmp
echo "server $server_ip online" | mail -c $ccaddress -s "$server_ip server online" $toaddress -- -f $fromaddress
}
###########
server_all_len=${#server_all_list}
i=0
while [ $i -lt $server_all_len ]
do
server_ip=$(echo ${server_all_list[$i]} | awk -F ':' '{print $1}')
server_port=$(echo ${server_all_list[$i]} | awk -F ':' '{print $2}')
#status: 0,http down 1,http ok 2,http down but ping ok
if nc -vv -z -w 10 $server_ip $server_port > /dev/null 2>&1
then
status=1
messages="server $server_ip,port $server_port can't access!"
else
if ping -c 1 $server_ip > /dev/null 2>&1
then
status=2
messages="server $server_ip,Port $server_port cannot access,but Ping is connected!"
else
status=0
messages="server $server_ip,port $server_port and Ping cannot access!"
fi
fi
if [ $status -eq 1 ];then
grep "$server_ip" mun.tmp > /dev/null 2>&1
if [ $? -eq 0 ];then
reset_mun
fi
else
send_msg
fi
let i++
done
|
daemon.sh
1
2
3
4
5
6
7
| #!/bin/sh
dir=`pwd`
while true
do
/bin/sh $dir/tcp.sh > /dev/null 2>&1
sleep 180
done
|
service.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| #!/bin/sh
dir=`pwd`
start() {
ps -ef |grep -v grep|grep daemon.sh > /dev/null 2>&1
if [ $? -eq 0 ];then
exit
else
/usr/bin/nohup /bin/sh $dir/daemon.sh 2>&1 > /dev/null &
fi
}
stop() {
PID=$(ps -ef |grep -v grep|grep daemon.sh|awk '{print $2}')
kill $PID
}
reload() {
stop
start
}
status() {
ps -ef |grep -v grep|grep daemon.sh > /dev/null 2>&1
if [ $? -eq 0 ];then
echo "daemon.sh is running..."
else
echo "daemon.sh is stop"
fi
}
case "$1" in
start)
start && exit 0
$1
;;
stop)
stop && exit 0
$1
;;
status)
status && exit 0
$1
;;
reload)
reload && exit 0
$1
;;
*)
echo $"Usage: $0 {start|stop|status|reload}"
exit 2
esac
|
|
|