Perl script realizes the function of detecting host heartbeat signal

Time:2021-12-29

Using serial port communication, the following script is used at the standby terminal to detect the heartbeat signal from the host. Once the number of unaccepted times exceeds the specified count, the standby considers the host down and automatically sets it as the network parameter of the host to provide services instead of the host.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# ! 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  =  '
 
# ----------------------------------
#Interface IP configuration
# ----------------------------------
pushd interface ip
 
 
#Interface IP configuration of "local"
 
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
#End of interface IP configuration
 
 
 ' ; # 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 ([email protected]) { 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 ([email protected]) { 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 ;

 

Recommended Today

String s = new string (“XXX”); how many objects are created?

introduction I went to the interview on Friday and was asked a dumb question Interviewer: String s = new string (“XXX”); How many objects were created?Me: two?Interviewer: which two?I:… (mute) Before that, I only knew that there were two. As for why there were two, I didn’t know. analysis //In constant pool String str1 = […]