Unix/Linux 系统自动化管理 邮件系统篇(5)
- UID
- 1066743
|
Unix/Linux 系统自动化管理 邮件系统篇(5)
结合 cron 的系统监控功能实现系统管理人员可以结合 cron 与电子邮件的自动发送功能,实现系统状态的自动监控功能。cron 是一个定时调度任务的守护进程,它可以根据时间、日期、月份、星期的组合来调度任务。关于 cron 的详细教程,读者可以参考在 developerworks 上的教程《 》,或者参考 Internet 上的相关文章。
监控系统 CPU 利用率(LINUX)我们首先实现一个可以获取当前系统 CPU 使用率的 Perl 脚本。它可以获取当前的 CPU 使用率,一旦获取到的 CPU 使用率超过 85%,该脚本就会自动发送电子邮件给指定的用户。注意,该脚本只能运行于 Linux 平台。
具体的 Perl 脚本内容可以参考清单 19。
清单 19. 监控系统 CPU 利用率的脚本1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| #!/usr/bin/perl
use Mail::Mailer;
sub get_cpu_stat {
my @stats;
my $fh;
#Linux 系统,从 /proc/stat 来获取 CPU 信息
open($fh, "cat /proc/stat |") or die "$!";
while (<$fh>) {
#get the cpu stat
if (/^cpu .*/) {
@stats = split;
}
}
close $fh;
#then, we parse the cpu stat information;
#the information from "man proc",
#the format is for Linux 2.6.11 or higher
#cpu user nice system idle iowait irq softirq steal
#cpu 628808 1642 61861 24978051 22640 349 3086 0 0
# 数据格式如上所示,更详细的信息请参考 proc 的 manpage
my $total = $stats[1] + $stats[2] + $stats[3] + $stats[4];
my $idle = $stats[4];
# 返回当前 CPU 的 total 和 idle 时间片计数
return ($total, $idle);
}
my $mailer = Mail::Mailer->new('sendmail');
my ($t1, $i1) = get_cpu_stat();
sleep 5;
my ($t2, $i2) = get_cpu_stat();
my $total = $t2 - $t1;
my $idle = $i2 - $i1;
# 计算获取 5 秒钟之内的 CPU 利用率
my $per = 100 * ($total - $idle) / $total;
if( $per > 85) {
# 如果 CPU 利用率大于 85%
my $msg = sprintf("!!!Attention\nThe CPU usage on your server is %.2f"
. "% right now!\nPlease check it right now!\n", $per);
#send mail to the assigned user
# 发送邮件给指定的用户
$mailer->open(
{
From => 'root@minjun-desktop',
To => 'minjun.xi@cn.ibm.com',
Subject => 'Attention for your cluster',
})
or die "Mail::Mailer failed!\n";
print $mailer $msg;
$mailer->close();
}
|
配置 cron 任务我们可以利用“crontab”命令来配置 cron 任务;在本文中,我们设定每个小时的第 30 分钟运行一下监控系统 CPU 利用率的脚本。我们使用”crontab – e”命令来编辑当前用户的 cron 任务,编辑的内容如清单 20 所示,其中 mon.pl 是清单 19 中 Perl 脚本的名称,/path/to/ 是指 mon.pl 脚本的路径。
清单 20. 配置 cron 任务1
| 30 * * * * perl /path/to/mon.pl
|
|
|
|
|
|
|