Собсно сабж. Как с этим бороться? Чаще всего такое происходит ночью, когда на серваке 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... В чем может быть проблема? Никто не сталкивался с подобным?