The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Proc::ProcessTable выпадают процессы, хотя в top/ps они прис..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Proc::ProcessTable выпадают процессы, хотя в top/ps они прис..."  
Сообщение от Skif (ok) on 27-Мрт-06, 15:46 
Собсно сабж. Как с этим бороться? Чаще всего такое происходит ночью, когда на серваке 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... В чем может быть проблема? Никто не сталкивался с подобным?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Proc::ProcessTable выпадают процессы, хотя в top/ps они прис..."  
Сообщение от chip email(ok) on 28-Мрт-06, 22:23 
>Собсно сабж. Как с этим бороться? Чаще всего такое происходит ночью, когда
>на серваке 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... В чем может быть проблема? Никто не сталкивался
>с подобным?

Я если пробовать тоже самое состряпать средствами sh/pgrep/pkill ?! С "нулевым" сигналом?!

Ключевая идея в примере:
chip@nebula:~$ pkill -0 mysqld; echo $?
1
chip@nebula:~$ pkill -0 firefox; echo $?
0
chip@nebula:~$

firefox - существующий процесс, mysqld - нет.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Proc::ProcessTable выпадают процессы, хотя в top/ps они прис..."  
Сообщение от Skif (ok) on 31-Мрт-06, 11:36 
>Я если пробовать тоже самое состряпать средствами sh/pgrep/pkill ?! С "нулевым" сигналом?!
>
>
>Ключевая идея в примере:
>chip@nebula:~$ pkill -0 mysqld; echo $?
>1
>chip@nebula:~$ pkill -0 firefox; echo $?
>0
>chip@nebula:~$
>
>firefox - существующий процесс, mysqld - нет.

ТОже вариант, просто не хотелось бы пользоваться system и обратными кавычками. Пока решил вариант с обратными кавычками при использовании вызова px -auxwww и парсингом получаемого вывода. Просто мне хотелось бы иметь более менее полную информацию о процессе. И этот мождуль подходил как нельзя лучше, но его глюки... В итоге сейчас переделал под обратные кавычки, как говорил, и вывод ps auxwww более-менее меня устраивает.
Но ваш вариант тоже ничего  :) Даже наверное лучше для проверки живучести процесса.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру