efk/scripts/mon_proc
2021-08-29 00:02:22 +08:00

56 lines
1.2 KiB
Bash
Executable File

#!/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