first commit
This commit is contained in:
55
scripts/mon_proc
Executable file
55
scripts/mon_proc
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
|
||||
export LANG=en_US.UTF-8
|
||||
PROC_FILE="$(dirname $0)/proc.list"
|
||||
LOG_PATH="/var/log/monitor"
|
||||
LOG_NAME="proc"
|
||||
INTERVAL=60
|
||||
|
||||
function Init {
|
||||
local self_count=$(pgrep -cx "$(basename $0)")
|
||||
[ 0 -eq $? ] || exit 1
|
||||
[ 1 -eq $self_count ] || exit 1
|
||||
mkdir -p $LOG_PATH || exit 1
|
||||
}
|
||||
|
||||
function Log {
|
||||
local msg="$1"
|
||||
local log_time="$(date +'%F %T')"
|
||||
local log_file="$LOG_PATH/$LOG_NAME-${log_time% *}.log"
|
||||
echo "$log_time $msg" >> $log_file
|
||||
cd $LOG_PATH && ls ${LOG_NAME}-* 2>/dev/null \
|
||||
| head -n -7 | xargs rm -f
|
||||
}
|
||||
|
||||
function GetProcInfo {
|
||||
local line="$1"
|
||||
local class="${line%% *}"
|
||||
local proc="${line#* }"
|
||||
local stat_code=1
|
||||
local stat=
|
||||
if [ 'service' = "$class" ]; then
|
||||
stat="$(systemctl status $proc \
|
||||
| grep -m 1 '^ Active:' \
|
||||
| awk '{print $2}')"
|
||||
[ 'active' = "$stat" ] && stat_code=0
|
||||
[ -z "$stat" ] && stat="unknown"
|
||||
else
|
||||
pgrep -f "$proc" &> /dev/null && stat_code=0 \
|
||||
&& stat='running' || stat='stopped'
|
||||
fi
|
||||
echo "$class#$proc#$stat#$stat_code"
|
||||
}
|
||||
|
||||
function Main {
|
||||
local line=
|
||||
sleep $INTERVAL
|
||||
while read line; do
|
||||
Log "$(GetProcInfo "$line")"
|
||||
done < $PROC_FILE
|
||||
}
|
||||
|
||||
# start
|
||||
Init
|
||||
Main
|
||||
|
Reference in New Issue
Block a user