Собсно сабж. Как с этим бороться? Чаще всего такое происходит ночью, когда на серваке smb шары ставятся на проверку антивирусником. А по крону каждые 5 минут отрабатываются критичные процессы.
"Вылетают" четыре процесса. И если пару я могу отключить от мониторинга, то остальная пара взаимосвязана. Согласно модуля, "вылетают":
natd
pop3d
asterisk
mpg123
ВОт собственно код:
#!/usr/bin/perl -w
use strict;
use warnings;
use lib "/usr/local/scripts/lib/";
use lib "/usr/local/script/lib/";
use skmainmod;
use Sys::Hostname;
use Proc::ProcessTable;
my @etc = ('/etc/FS/','/usr/local/etc/chk/',
'/usr/chk/etc/','/usr/chk/etc/',
'/usr/local/chk/etc/',
'/usr/script/chk/etc/',
'/usr/scripts/chk/etc/',
'/usr/local/script/chk/etc/',
'/usr/local/scripts/chk/etc/');
my $etc_file = 'cryt_proc.conf';
my @log = ('/usr/local/script/chk/log/',
'/usr/local/scripts/chk/log/',
'/usr/script/chk/log/',
'/usr/scripts/chk/log/',
'/usr/local/var/log/chk/',
'/usr/var/log/chk/',
'/var/log/chk/',
'/var/log/');
my %argv = skmainmod->argum_read(@ARGV);
my $conf_file = $argv{'conf'} || skmainmod->chk_file($etc_file,@etc) || die "No found config file!\nExit!\n";
my %conf = skmainmod->read_config($conf_file);
my $table = new Proc::ProcessTable;
my @proc_arr = ();
foreach my $process (@{$table->table}) {
my $res = 0;
#print "--------------------------------\n";
#print $process->fname, "\n";
foreach my $tbl (@proc_arr){
if ($tbl eq $process->fname) {
$res++;
}
}
if ($res <1) {
push @proc_arr, $process->fname;
}
}
my @sort_arr = sort @proc_arr;
@proc_arr = ();
@proc_arr = @sort_arr;
@sort_arr = ();
my $cryt_proc = $conf{'crytical_process'};
$cryt_proc =~ s/[\s\t++]//g;
my @report_mail;
my $mail_send = 0;
foreach my $chk (sort(split(/\,/,$cryt_proc))){
my $res =0;
my $report = "Crytical process: $chk --->";
foreach my $pr (@proc_arr){
# print "$pr\n";
if ($pr eq $chk) {
$res++;
}
}
if ($res < 1) {
$report = "$report is down. Warning!!!\n";
$mail_send++;
&send_report('sms',$chk,'down');
}
else {
$report = "$report is active.\n";
}
push @report_mail,$report;
}
if ($mail_send > 0){
&send_report('mail',@report_mail);
}
exit(0);
Соотвественно на выходе в почту и на sms получаю:
DATE of REPORT: 05:00:06 27.03.2006
HOST: k.com.ua
Crytical process: asterisk ---> is down. Warning!!!
Crytical process: httpd ---> is active.
Crytical process: master ---> is active.
Crytical process: mpg123 ---> is down. Warning!!!
Crytical process: mysqld ---> is active.
Crytical process: pptpd ---> is active.
Crytical process: radiusd ---> is active.
Crytical process: smbd ---> is active.
Crytical process: squid ---> is active.
Crytical process: sshd ---> is active.
Crytical process: vtund ---> is active.
В общем проверка показывает, что процесс живой и никуда не девался, а скрипт рапортует, что уходит в даун. Тоесть, есть подозрения, что виной имено модуль Proc::ProcessTable... В чем может быть проблема? Никто не сталкивался с подобным?