本文介绍一种在Linux系统下为实现某些关键进程状态的实时监控而使用shell脚本的编写方法。在这里主要通过监控某些进程是否退出作为判断依据,如果某个进程退出了,则进行对应的恢复处理,如重新拉起相关的进程等。
下面介绍该脚本的实现流程。
首先生成一个名为”process_check.sh”的脚本,脚本内容如下:
-
#!/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="./test1,./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
测试验证
这里写一个简单的测试程序,代码如下:
-
void main()
-
{
-
while(
1) {
-
sleep(
3);
-
}
-
}
编译后生成两个名为“test1”,“test2”的可执行文件。
为了方便测试,可以将”process_check.sh”,”test1”,”test2”放置于同一个目录下。
运行”process_check.sh”,如下所示:
从上图可知,”test1”,”test2”刚开始并未被拉起,运行”process_check.sh”之后,检测出”test1”,”test2”不存在,则触发拉起的机制,最终”test1”,”test2”被启动了。
运行过程中kill掉某一个进程,验证”process_check.sh”是否有将该进程拉起。
由下图可知,被kill的进程最终又被拉起了。
至此,该脚本的功能已被验证完毕。
结语:在 Linux 平台下,shell 脚本监控是一个非常简单、方便的工具,它可以有效的对服务器、进程进行监控,对系统开发以及进程维护人员非常有帮助。
转载:https://blog.csdn.net/zhongcaogen/article/details/129218446
查看评论