Unix/Linux 进程管理自动化实现
在这篇文章里,我们将给出两个比较常见的进程自动化管理示范实例,分别用来进行进程状态自动化 管理和进程性能监控自动化管理。用户可以根据自身需求,在这些脚本的基础上进行扩展,实现更加复杂 的管理功能。
实现这两个自动化脚本,我们需要三个文件,主要脚本文件,实现进程自动化管理的主要程序;操作 定义文件,定义进程名称以及相关信息和指定操作;用户自定义的 action 文件,定义系统采取的一系列 操作。具体实现将在下面详细描述。
进程状态管理自动化实现
服务器中的一些服务进程可能不稳定,偶尔会异常终止,因此需要一个监控程序来对这些进程进行监 控,当发现被监控的服务进程异常终止时,将其重新启动或者实行一系列操作。
该监控程序的基本实现思路是,编写一个监控脚本,然后在系统的 crontab 中将该脚本配置为定期自 动执行(例如可以配置为每 2 分钟执行一次),监控脚本通过监控服务进程的状态来判断服务进程是否 已终止,当监控条件成立时,执行指定的命令或者脚本。
本实例的具体实现方法如下:
脚本 CheckProcLive 实现了监控指定进程状态并在发现进程终止时采取指定的响应操作的功能。该脚 本在 RedHatEL-Server 5.3、SLES 10 SP2 和 AIX 5.3 操作系统上测试通过,可以正常执行,使用 perl 的版本为 v5.8.8。默认情况下,保存进程名称以及对应操作的操作定义文件为 /root/StartProc,该文 件位置也可以通过参数指定。代码如下:
清单 2. /root/CheckProcLive 文件内容
#!/usr/bin/perl
use strict;
my $StartProcFile = $ARGV[0];
if( $StartProcFile eq "" )
{
$StartProcFile = "/root/StartProc";
}
my %StartProcHash = GetStartProc($StartProcFile);
my %PsHash = &GetPs;
while (my($key,$value) = each %StartProcHash)
{
if(!defined($PsHash{$key}))
{
system "$value";
}
}
# 获取正在运行的进程命令,并将其存放在一个 Hash 表中,
# 其中 key 为命令名称,值赋了同样的一个数字 1,这个值没有特殊含义和作用
sub GetPs
{
# 获取 ps -e 的第四列,即包含命令的列
my @PsArray = `ps -e |perl -ane 'print "$F[3]n"'`;
my %PsHash;
foreach my $cmditem(@PsArray)
{
chomp($cmditem);
$PsHash{$cmditem} = 1;
}
return %PsHash;
}
# 获取参数指定的或者程序默认的操作定义文件的信息,并将其中的信息存入 Hash 表中,其中 key 值是命令名称
#value 是指发现进程终止时进行的相应操作。
sub GetStartProc
{
my ($file) = @_;
my $result;
my %startproctab;
unless(open(TABF, $file)) {
print "Can't open file '$file'.n";
exit 1;
}
foreach my $line (<TABF>)
{
chomp($line);
#print "line = $line";
if(!($line =~ /^#/) && $line =~ /(S+),(.+)s*$/)
{
$startproctab{$1} = $2;
}
}
return %startproctab;
close TABF;
} (编辑:云计算网_泰州站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|