Падает Демон На Перле

Тема в разделе "Perl программирование", создана пользователем dreamer-fkn, 24 янв 2012.

  1. dreamer-fkn

    dreamer-fkn Гость

    Здравствуйте, проблема следующая..
    написан демон держащий постоянное подключение к циске по телнету с помощью Net::Telnet::Cisco.
    также этот демон является сервером на сокете типа UNIX.

    через сокет к нему цепляется клиент и дает команды - которые демон переправляет на циску.

    обработку ошибок теленета настроил.. но все равно по истечении какого-то времени демон рвет телнет сессию.. и при подключении к ниму клиента через сокет - демон просто падает..
    подскажите в чем может быть причина.
    Код (Text):
    #!/usr/bin/perl -w
    #use strict;
    use IO::Socket;
    use Net::Telnet::Cisco;
    if ( ` ps afx | awk '/[0-9]+ server_telnetd/ {print $1;}'`) {

    # чтобы не запустить еще один экземрляр.
    print "Usage: service exec-daemon {start|stop}\n exit...\n ";
    exit;

    }
    $0 = "server_telnetd"; # даем имя процессу , для красоты
    my $basedir="/home/admin/socket/";
    sub coderef{
    local $err=@_[0];
    print "\n Error\n";
    print $err;
    if($err=~m/read error/ || $err=~/write error/){
    if($ip eq $cisco1_ip){
    $t1->open($cisco1_ip);
    $t1->login($cisco_user,$cisco_pass);
    @lines=$t1->cmd("configure terminal");
    @lines=$t1->cmd($comm);
    print @lines;
    }
    if($ip eq $cisco2_ip){
    $t2->open($cisco2_ip);
    $t2->login($cisco_user,$cisco_pass);
    @lines=$t2->cmd("configure terminal");
    @lines=$t1->cmd($comm);
    print @lines;
    }
    }
    print "\n End of error\n";
    print "comm=$comm;ip=$ip\n";
    }
    local $t1 = Net::Telnet::Cisco->new(Timeout => "120",Input_log=>$basedir."ind.log",Output_log=>$basedir."outd.log",Errmode => sub {&coderef});
    local $t2 = Net::Telnet::Cisco->new(Timeout => "120",Input_log=>$basedir."in2d.log",Output_log=>$basedir."out2d.log",Errmode => sub {&coderef});
    $cisco1_ip="192.168.1.1";
    $cisco2_ip="192.168.1.2";
    $cisco_user = "user";
    $cisco_pass = "pass";
    $t1->open($cisco1_ip);
    $t1->login($cisco_user,$cisco_pass);
    $t2->open($cisco2_ip);
    $t2->login($cisco_user,$cisco_pass);
    unlink "/tmp/mysock2";
    my $server=IO::Socket::UNIX->new(Local => "/tmp/mysock2", Type => SOCK_STREAM, Listen => 5) or die $@;
    $server->autoflush(1);
    my @lines;
    while(my $client=$server->accept()){
    my $data= <$client>;
    print $data, $/;
    local($ip,$com)=$data=~m/(\d+\.\d+\.\d+\.\d+);(.+)$/;
    @coms=split(/;/,$com);
    print @coms;
    if($ip eq $cisco1_ip){
    if(!$t1){
    print("reconnect t1\n");
    $t1->open($cisco1_ip);
    $t1->login($cisco_user,$cisco_pass);
    }
    foreach $comm(@coms){
    @lines=$t1->cmd($comm);
    print @lines;}
    }
    if($ip eq $cisco2_ip){
    if(!$t2){
    print("reconnect t2\n");
    $t2->open($cisco2_ip);
    $t2->login($cisco_user,$cisco_pass);
    }
    foreach $comm(@coms){
    @lines=$t2->cmd($comm);
    print @lines;}
    }
    }
    close($server);
    $t1->close();
    $t2->close();
     
Загрузка...
Похожие Темы - Падает Демон На
  1. Geimdiz
    Ответов:
    1
    Просмотров:
    319
  2. YGol
    Ответов:
    4
    Просмотров:
    1.512
  3. christi
    Ответов:
    0
    Просмотров:
    1.215
  4. turumbay
    Ответов:
    18
    Просмотров:
    3.186
  5. dzheyzhi
    Ответов:
    2
    Просмотров:
    1.460

Поделиться этой страницей