加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

Unix/Linux系统自动化管理: 进程管理篇

发布时间:2016-08-06 13:20:08 所属栏目:Unix 来源:站长网
导读:简介:本文是 Unix/Linux 系统管理自动化系列中的一篇,主要讲述如何实现自动化监控进程状态和 性能并及时通知系统管理员。 进程监控是 Unix/Linux 系统管理中

同时因为 ftpd 服务没有启动,监控程序也执行了 /root/action1 脚本,因此 root 用户的邮箱中会 收到一封标题为 process status warning!的预警邮件,如下所示:

清单 8. 预警邮件内容

From root@hv4plus_lpar2.ppd.pok.ibm.com Wed Jun 3 09:00:02 2009
X-Original-To: root
Delivered-To: root@hv4plus_lpar2.ppd.pok.ibm.com
Date: Wed, 03 Jun 2009 09:00:02 -0400
To: root@hv4plus_lpar2.ppd.pok.ibm.com
Subject: process status warning!
User-Agent: nail 11.25 7/29/05
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
From: root@hv4plus_lpar2.ppd.pok.ibm.com (root)

process ftpd is not running now

进程性能监控自动化实现

进程在正常工作过程中,会占用一定的 CPU 和内存资源。如果占用过高的 CPU 和内存资源,则有可 能是进程出现异常情况,并且可能会影响其他重要进程的正常运行。因此监控进程性能并在发现异常情况 的时候自动做出反应,例如 kill 掉该进程、修改进程优先级或者发送预警信息给管理员,这将会给系统 管理工作带来很大的帮助。

脚本 CheckProcPerformance 可以实现对进程性能自动化监控的功能,在发现进程 CPU 或者内存资源 超出预定义的阈值时,执行指定的操作。用户还可以根据自己的需求,修改该代码,以实现更加复杂的监 控功能。默认的定义阈值的文件是 /root/ProcAction,该文件也可以通过参数指定。该脚本在 RedHatEL-Server 5.3、SLES 10 SP2 操作系统上测试通过,可以正常执行,使用 perl 的版本为 v5.8.8 。由于该脚本使用 top 命令获取进程性能信息,因此该脚本只适用于 Linux 操作系统,不适用于 AIX 操作系统。

清单 9. /root/CheckProcPerformance 文件内容

#!/usr/bin/perl
use strict;

my $ProcActionFile = $ARGV[0];
if( $ProcActionFile eq "" )
{
 $ProcActionFile = "/root/ProcAction";
}

# 获取定义阈值文件的信息
my @ProcActionTable = &GetProcAction($ProcActionFile);

# 获取 top 信息,提取 COMMAND,%CPU,%MEM 三列信息
my %TopInfoTable = &GetTopInfo;

foreach my $line(@ProcActionTable)
{
 chomp ($line);
 my @ActionLine=split /,/,$line;
 my $value;
 #$ActionLine[0] 是 Command 名称 ;$value是$ActionLine[0] 进程所对应的CPU%和
 #MEM%值
 if (defined($TopInfoTable{$ActionLine[0]}))
 {
 $value = $TopInfoTable{$ActionLine[0]};
 }
 else
 {
 next;
 }

 #$ActionLine[1] 的值是 CPU 的阈值 ; $ActionLine[2] 的值是内存阈值 ;
 #$ActionLine[3] 的值是响应脚本的名称
 # 如果 CPU% 或者 MEM% 超出阈值文件所定义的 CPU 或者内存阈值,将执行
 #$ActionLine[3] 对应的响应脚本

 if( $ActionLine[1] < $$value[0] || $ActionLine[2] < $$value[1] )
 {
  # 将监控进程的名称,CPU 和内存利用率值作为参数传给响应脚本
  # 使脚本能提供管理员更详细预警信息
 system "$ActionLine[3] $ActionLine[0] $$value[0] $$value[1]";
 }

}

# 获取 top 信息,提取 COMMAND,%CPU,%MEM 三列信息,并以 COMMAND 为 key,#[%CPU,% MEM] 为 value,存入 Hash 表中
sub GetTopInfo
{
 my @TopInfo = `top -n 1 | awk {'print $13" "$10"  "$11'}`;

 # 去掉 top 命令所显示的系统摘要信息部分
 for( my $i=0; $i<7; $i++ )
 {
 shift( @TopInfo );
 }
 my %TopTable;
 foreach my $topitem (@TopInfo)
 {
 my @pair = split /s+/,$topitem;
 $TopTable{$pair[0]} = [$pair[1], $pair[2]];
 }
 return %TopTable;
}

# 获取 ProcAction 信息,将非注释的行存入数组中,
sub GetProcAction
{
 my ($file) = @_;
 unless(open(TABF, $file)) {
 print "Can't open file '$file'.n";
 exit 1;
 }
 my @table;
 foreach my $line (<TABF>)
 {
 chomp($line);
 if(!($line =~ /^#/) )
 {
 push(@table, $line);
 }
 }

 return @table;
 close TABF;
}

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读