简单的进程、磁盘、日志监测shell脚本

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/bin/bas
#
################################################################################
# process status monitor config
################################################################################
# process num
ProcNum=2
#
ProcUser[0]=sybase
ProcName[0]=dataserver
#
ProcUser[1]=sybiq
ProcName[1]=iqsrv15
#
#
################################################################################
# filesystem space monitor config
################################################################################
# filesystem space num
FsNum=1
#
# FsName: filesystem name
# MaxPercent: maximum filesystem space used
FsName[0]=/home/roo/
MaxPercent[0]=90
#
#
################################################################################
# program log monitor config
################################################################################
# LogNum:log num
LogNum=1
#
# LogDir: log file directory
# LogName: log file name
# MaxHoldMin: warning if log file doesn't increase in appointed minutes
LogDir[0]=/home/roo/
LogName[0]=$(date +%Y%m%d).log
MaxHoldMin[0]=10
#
#
################################################################################
# function declaration
################################################################################
# function get process id
function GetPID #User #Name
{
    PsUser=$1
    PsName=$2
    pid=$(ps -u $PsUser|grep $PsName|grep -v grep|grep -v vi|grep -v dbx \
    |grep -v tail|grep -v start|grep -v stop |sed -n 1p |awk '{print $1}')
    echo $pid
}
#
# function get filesystem space
function GetDiskSpc #FileSystem
{
    if [ $# -ne 1 ]; then
        return 1
    fi
    #
    FsDir=$1
    DiskSpace=$(df -P $FsDir |tail -1 |awk '{print $5}' |awk -F% '{print $1}')
    echo $DiskSpace
}
#
#
function GetLogHold #LogPath
{
    LogTime=$(ls --full-time  $LogPath | awk '{print $6" "$7}' | cut -d"." -f1)
    SYSTime=$(date +%F" "%T)
    echo | \
    awk -v T1=LogTime -v T2=SYSTime '{
        t1=mktime(T1);
        t2=mktime(T2);
        dif=(t2-t1)/60;
        print dif}'
}
#
################################################################################
# process check
################################################################################
echo
echo "-- PROCESS STATUS CHECK BEGIN."
i=0
while [ $i -lt $ProcNum ]
do
    echo -n "Check process ${ProcName[$i]}: "
    PID=$(GetPID ${ProcUser[$i]} ${ProcName[$i]})
    #
    if [ "-$PID" == "-" ]; then
        echo "Warning: process ${ProcName[$i]} does not exist!"
    else
        echo "Process ${ProcName[i]} is normal."
    fi
    #
    echo
    i=$[ $i + 1 ]
done
#
echo "-- PROCESS STATUS CHECK END."
echo
echo
#
################################################################################
# file system spaces check
################################################################################
echo
echo "-- FILESYSTEM SPACE CHECK BEGIN."
i=0
while [ $i -lt $FsNum ]
do
    echo -n "Check filesystem ${FsName[$i]}: "
    DiskSpace=$(GetDiskSpc ${FsName[$i]})
    #
    if [ $DiskSpace -gt ${MaxPercent[$i]} ]; then
        echo "Warning: filesystem (${FsName[$i]}) used $DiskSpace% more than ${MaxPercent[$i]}%!"
    else
        echo "Filesystem [${FsName[$i]}] used $DiskSpace%."
    fi
    #
    echo
    i=$[ $i + 1 ]
done
#
echo "-- FILESYSTEM SPACE CHECK END."
echo
echo
#
################################################################################
# program log check
################################################################################
echo
echo "-- LOG STATUS CHECK BEGIN."
i=0
while [ $i -lt $LogNum ]
do
    echo -n "Check log ${LogDir[i]}${LogName[i]} : "
    LogHoldMin=$(GetLogHold ${LogDir[i]}${LogName[i]})
    #
    if [ $LogHoldMin -gt ${MaxHoldMin[0]} ]; then
        echo "Warning: log [${LogDir[i]}${LogName[i]}] hold $LogHoldMin minutes more than ${MaxHoldMin[0]}!"
    else
        echo "Log [${LogDir[i]}${LogName[i]}] hold $LogHoldMin minutes."
    fi
    #
    echo
    i=$[ $i + 1 ]
done
#
echo "-- LOG STATUS CHECK END."
echo
echo
#