Perl脚本实现检测主机心跳信号功能_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 ;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索Perl脚本
perl脚本、perl脚本怎么运行、如何运行perl脚本、运行perl脚本、perl调用shell脚本,以便于您获取更多的相关知识。

时间: 2024-10-30 21:01:47

Perl脚本实现检测主机心跳信号功能_perl的相关文章

两段Perl脚本代码(数组应用与say用法)_perl

一.数组应用 复制代码 代码如下: #!/usr/bin env perl@zeng = `top -b -n 1`;foreach (@zeng) {print "$_\n";} 二.say的用法:自动换行 复制代码 代码如下: #!/user/bin env perluse 5.010; #表示使用perl 5.10的版本.say "Hello World!";my @fred = above_average(1..10);print "\@fred

Perl脚本检测一个域名是否有效_perl

脚本功能:通过ICMP Ping或TCP/SYN探测指定的域名,探测前检测域名是否有效. file: check.host.pl #!/usr/bin/perl use strict; use Net::Ping; use Net::DNS; use Time::HiRes qw(); $| = 1; my $DEFAULT_TIMEOUT = 2; my $PING_TIMEOUT = 2; my $DNS_TIMEOUT = 3; ### 查询域名是否有效 sub queryDomain {

Shell脚本实现检测某ip网络畅通情况(含短信报警功能)_linux shell

花了1天的时间写了一个检测某ip是否网络畅通的脚本,只检测网络是否畅通的功能很容易实现,但加了一些限制功能却不好实现. 复制代码 代码如下: #!/bin/bash #################################################################################### #本脚本放于异机,使用定时任务检测192.168.10.231是否网络畅通,如果不通则发短信告警  #为防止频繁收到短信,对发送短信做了如下限制:         

Win8系统无法自动检测周边wifi信号的解决方法

Win8系统无法自动检测周边wifi信号的解决方法 一.在Win8系统桌面上,用鼠标右键点击,然后在弹出的菜单上选择"管理",即可打开Win8系统计算机管理面板; 二.在Win8系统计算机管理面板上,点击左侧窗格中的"存储"-"服务和应用程序"-"服务",接着在右侧窗格中找到服务选项; 三.Win8系统服务功能面板,找到WLAN AutoConfig服务,并双击打开,将启动类型设置为"自动",再将服务状态调

argv-初次接触perl脚本,请问下面的代码怎么理解

问题描述 初次接触perl脚本,请问下面的代码怎么理解 #!/usr/local/bin/perl $pattern=$ARGV[0];$count=$pattern=~s/(?<[^>]*>)//g;@ARGV=qw# #;$print='print ""'; 解决方案 #!/usr/local/bin/perl 这句如同*nix操作系统中用来指定脚本解释程序的位置./usr/local/bin/perl是Perl语言的脚本解释器程序.$pattern=$ARGV[

Java调用telnet连接到Unix环境的服务器然后再执行perl脚本

问题描述 各位大侠,本人有一个难题,想请教大家,如下:要用Java调用telnet连接到Unix环境的服务器然后再执行perl脚本,并且能够把执行perl脚本的信息返回给前端展示出来.因为本人之前从来没有做过这个所以向大家求救,谢谢!!! 解决方案 解决方案二:不知道但顶一下,闲着无聊解决方案三:方法1.找一个telnet功能的java代码,自然有执行unix命令的方法,也有相应的获取unix回显的方法方法2.有一个类,叫什么我忘了.专门执行命令行命令的,我当时做的时候,是执行windows下的

FTP自动上传文件的perl脚本以及配置文件_perl

<?XML:NAMESPACE PREFIX = O /> 本应用程序设计的几个基本理念是:工具箱再利用:尽可能利用已有的工具:简化运行步骤:不引入过多的业务逻辑,满足的需求越简单越好. 所以,我们定义了本应用程序依赖于以下几个工具的运行:ActivePerl-5.8.4.810-MSWin32-x86Upload.plUpload.config 我们将主要的执行逻辑都放在Perl源文件Upload.pl中了,配置文件为Upload.config. 这个perl文件将执行的任务是, 按照指定的

perl脚本实现限制ssh最大登录次数(支持白名单)_perl

ssh limit perl脚本主要作用: 1.限制一个ssh用户的最大登录数为n,n可自定义. 2.支持白名单,如root.test登录不受限制. 如果一个ssh用户的最大登录数超过指定数字,则后登录的会把先前登录的踢掉,以此达到控制登录数的目的. 该脚本需要主机支持perl,如果没有,可yum安装. 脚本源码: #!/usr/bin/perl -w use strict; #white list my @ALLOW_USERS = qw{ test root lulu1 }; #the ma

Perl 脚本的特点

        本章介绍如何使用Perl DBI 与MySQL接口.我们不讨论DBI 的基本原理或体系结构.有关DBI 这些方面的信息(特别是与C 和PHP API 的比较),请参阅第5 章.    本章的举例动用了样例数据库samp_db,使用了学分保存方案和历史同盟需要的表.想要从本章中取得最大收获,最好了解一些有关Perl 的知识.如果不想这样,那么通过拷贝这里看到的样例代码,也能有所帮助,并可以编写自己的脚本,不过找一本好的Perl 书,可能仍是一件非常有价值的投资.有这样一本书,名为<