文章摘要
这篇文章介绍了在Linux系统中使用Bash脚本实现的进程监控功能。脚本包含三个主要函数:`checkprocess`、`recordinfo` 和 `check`。
1. **`checkprocess`** 函数用于统计指定进程的运行数量。当传入参数为空时,返回1;否则,通过命令 `ps -ef` 获取所有运行的进程,筛选出指定进程并返回其数量。
2. **`recordinfo`** 函数处理进程退出的情况。当传入参数为空时,直接返回;否则,记录进程退出的时间信息,并重新启动该进程。
3. **`check`** 函数是进程监控的核心。它会调用 `checkprocess` 获取当前指定进程的数量,并根据返回值判断进程是否已退出。如果退出,则调用 `recordinfo` 进行记录和重新启动。
脚本还设置了循环检测机制,每隔3秒检查一次进程状态,并对多个进程进行监控。通过这种方式,可以自动处理进程退出和重新启动的问题,从而保证关键进程的稳定运行。
总结来看,这篇文章通过简单的Bash脚本实现了对关键进程的监控、记录和重新启动功能,适用于需要自动化的进程管理场景。
#!/bin/bash
#该函数检查关键进程的状态,最终返回进程的个数。
checkprocess()
{
# echo “checkprocess…$1”
if [ “$1″=”” ];
then
return 1
fi
process_num=`ps -ef|grep “$1” |grep -v “grep” |wc -l`
# echo “checkprocess num=$process_num”
return $process_num
}
#进程如有退出,则记录相关的信息,并做相关的处理
recordinfo()
{
# echo “check $1”
if [ “$1″=”” ];
then
return
fi
#打印进程退出的时间
date “+++++++++++++++++++ +%Y-%m-%d %H:%M:%S ‘$1’ exit! +++++++++++++++++++”
#重新拉起这个进程
“$1” &
echo “restart $1”
}
#检查进程的状态
check()
{
echo “####check $1”
if [ “$1″=”” ];
then
return
fi
checkprocess “$1”
check_result=$?
#如果该进程的个数为0,则说明该进程已经退出
if [ $check_result -eq 0 ];
then
recordinfo “$1″
# exit
fi
}
#循环检测
while [ 1 ] ; do
#关键进程列表,多个进程以逗号分隔,这里以两个进程为例子。
process_name=”https://www.jb51.net/article/test1,https://www.jb51.net/article/test2″
OLD_IFS=”$IFS”
IFS=”,”
arr=($process_name)
IFS=”$OLD_IFS”
for s in ${arr[@]}
do
check “$s”
done
sleep 3
# echo “check loop…”
done