Linux下使用Shell脚本实现进程监控
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
本文介绍一种在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 脚本监控是一个非常简单、方便的工具它可以有效的对服务器、进程进行监控对系统开发以及进程维护人员非常有帮助。