• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Perl脚本实现检测主机心跳信号功能

    使用串口通信,在备机端使用如下脚本检测来自主机的心跳信号,一旦未接受次数超过指定记数,备机认为主机DOWN机,自动设置为主机的网络参数,顶替主机提供服务。

    # ! perl -w 
     
     use strict;
     use Win32 :: SerialPort;
    
     my  $port  =  ' COM2 ' ; # serail port name registried in OS 
     my  $count  =  0 ; # count number of heartbeat-receiving failture 
     my  $max_count  =  5 ; # max fail count to be tolerated 
     my  $interface  =  ' 
     
    # ---------------------------------- 
    # 接口 IP 配置     
    # ---------------------------------- 
    pushd interface ip
    
    
    # "local" 的接口 IP 配置
    
    set address name="local" source=static addr=192.168.6.185 mask=255.255.255.0
    set address name="local" gateway=192.168.6.65 gwmetric=0
    set dns name="local" source=static addr=192.168.6.112 register=PRIMARY
    add dns name="local" addr=192.168.6.201 index=2
    set wins name="local" source=static addr=none
    
    
    popd
    # 接口 IP 配置结束
    
    
     ' ; # net inetrface config information 
     
     sub errlog {
       # log the failtrue occuring time 
       
       open ERR ,  ' >>err.log ' ;
       my  @time  =  localtime ();
       my  $time  =  sprintf ( " %d " ,  $time [ 5 ] +  1900 ) 
                 .  ' - ' 
                 .  sprintf ( " %d " ,  $time [ 4 ] +  1 )
                 .  ' - ' 
                 .  " $time[3] " 
                 .  '  ' 
                 .  sprintf ( " %.2d " ,  $time [ 2 ])
                 .  ' : ' 
                 .  sprintf ( " %.2d " ,  $time [ 1 ])
                 .  ' : ' 
                 .  sprintf ( " %.2d " ,  $time [ 0 ]);
       print ERR $time . " \n " ;
       close ERR;
    }
    
     sub ipchange {
       # change ip addrress 
       
       open TMP ,  ' >tmp ' ;
       print TMP $interface ;
       close TMP;
      
       eval {
         system  ' netsh -f tmp ' ;
         unlink  ' tmp ' ;
      };
      
       if ($@) { return  0 ;}
       return  1 ;
    }
    
     my  $ob  = Win32 :: SerialPort -> new( $port ) or die  " CANNOT OPEN $port " ;
     # open serial port 
     
     eval {
       # set serial port properties 
       
       $ob -> baudrate( 9600 );
       $ob -> parity( ' none ' );
       $ob -> databits( 8 );
       $ob -> stopbits( 1 );
       $ob -> handshake( ' none ' );
    };
      
     if ($@) { die  ' SET FAILED ' ;}
    
     $ob -> write_settings or die  " CANNOT WRITE $port DRIVER " ;
     # write to port driver to make it active 
     
     while ( 1 ) {
       # loop receiving heartbeat from remote machine
      # change ip address after designated count of failture 
       
       my ( $length ,  $result ) =  $ob -> read ( 10 );
      
       if ( $result ) { 
         $count  =  0 ;
      } elsif ( $count  ==  $max_count ) {
        errlog();
         if (not ipchange()) { print  ' IP CHANGE FAILED ' ; }
         last ;
      }   else { 
         $count ++ ;
      }
      
       sleep ( 1 );
    }
    
     undef  $ob ;
    
    

    上一篇:Windows和Linux系统下perl连接SQL Server数据库的方法
    下一篇:Perl中使用File::Lockfile确保脚本单实例运行
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Perl脚本实现检测主机心跳信号功能 Perl,脚本,实现,检测,主机,