LJ Archive

Listing 2. Perl Script for Pull Method

#!/usr/bin/perl
$host="monitored.one";     # host to log to
                            # (machine to monitor)
$file="var/log/imp-logs";  # logging file on
                            # remote machine
$login="wallace"; # login name on remote machine
$ssh_opts="-q -C -o 'FallBackToRsh=no'";
                            # options to ssh
#$ssh_opts="-q +C";        # better for ssh2
$cmd="tail --follow=name --retry";
                       # the tail command executed
#$cmd="tail --follow"; # this could be
                             # used with old tails
$local_log="pulllog-log";    # local log for
                                        # failures
sub open_remote {            # open the connection
  open(SSH,"|ssh $ssh_opts -l $login $host
    ".'"'."$cmd $file".'"');"
  select(SSH);
  $|=1;              # make it unbuffered
}
if ($local_log) {       # if local logging enabled
  open(LOG,">>$local_log");  # open log file
  select(LOG);
  $|=1;
}
select STDOUT;
$SIG{'PIPE'}='IGNORE';
open_remote();   # try to establish the connection
while (1) {
  while (<SSH>) {
      print STDOUT;     # print on our side
  }
  print LOG "remote end was dead at " .
    `date` if ($local_log);
  close(SSH);           # if error occured
  open_remote();    # try to open connection again
}
LJ Archive