=head1 SYNOPSIS
- Usage: tunnel.pl [-u|sage] [-h|elp] [-ve|rbose] [-d|ebug]
-
- Where:
-
- -u|sage: Displays this usage
- -h|elp: Display full help
- -ve|rbose: Be verbose
- -d|ebug: Output debug messages
- -host1: First host for tunnel (Default: localhost)
- -port1: Port for host1
- -host2: Second host for tunnel (Default: defaria.com)
- -port2: Port for host2
- -a|nnounce: Whether to announce startup (Default false)
- -maxtretries: Maximum number of retry attempt to reestablish tunnel
- (Default 3)
- -nodaemon: Whether to go into daemon mode (Default: Daemon mode)
+ Usage: tunnel.pl [-u|sage] [-h|elp] [-ve|rbose] [-d|ebug]
+
+ Where:
+ -u|sage: Displays this usage
+ -h|elp: Display full help
+ -ve|rbose: Be verbose
+ -d|ebug: Output debug messages
+ -host1: First host for tunnel (Default: localhost)
+ -port1: Port for host1
+ -host2: Second host for tunnel (Default: defaria.com)
+ -port2: Port for host2
+ -a|nnounce: Whether to announce startup (Default false)
+ -ap|pend Append to logfile (Default: Noappend)
+ -maxtretries: Maximum number of retry attempt to reestablish tunnel
+ (Default 3)
+ -nodaemon: Whether to go into daemon mode (Default: Daemon mode)
=head1 DESCRIPTION
use Display;
use Logger;
+use Speak;
use Utils;
my $VERSION = '$Revision: 1.0 $';
my ($log, $ssh);
-sub Say($) {
- my ($msg) = @_;
-
- if (-f "$FindBin::Bin/shh") {
- $log->msg("Not speaking because we were asked to be quiet - $msg");
-
- return;
- } # if
-
- my ($status, @output) = Execute "/usr/local/bin/gt \"$msg\"";
-
- $log->err("Unable to speak (Status: $status) - "
- . join ("\n", @output), $status) if $status;
-
- return;
-} # Say
-
sub Report ($;$) {
my ($msg, $err) = @_;
- Say $msg;
+ speak $msg, $log;
if ($err) {
$log->err($msg, $err);
Report "Tunnel killed unexpectedly", 1;
kill 'INT', $ssh->get_master_pid;
+
+ return;
} # interrupt
sub tunnel() {
Report("Unable to establish ssh tunnel " . $ssh->error, 1) if $ssh->error;
+ # Check to see if address is already in use
my @lines = <$fh>;
close $fh;
my $msg = 'Ssh tunnel ';
$msg .= $retryattempts ? 'reestablished' : 'established';
- Say $msg if $opts{announce};
+ speak $msg, $log if $opts{announce};
$log->msg($msg);
+ # Reset retry attempts since we reestablished the tunnel
+ $retryattempts = 0 if $retryattempts;
+
# Wait for master to exit
waitpid($ssh->get_master_pid, WUNTRACED);
Report 'Ssh tunnel terminated unexpectedly - Attempting restart';
+ undef $ssh;
+
goto RETRY;
} # if
'announce!',
'maxretries=i',
'daemon!',
+ 'append',
) || Usage;
# Turn off daemon mode if we are in the Perl debugger;
use warnings;
$log = Logger->new(
- path => '/var/log',
+ path => '/var/local/log',
name => "$Logger::me",
timestamped => 'yes',
- append => 'yes',
+ append => $opts{append},
);
$log->msg("$FindBin::Script v$VERSION");
$SIG{INT} = $SIG{TERM} = \&interrupt;
-EnterDaemonMode if $opts{daemon};
+if ($opts{daemon}) {
+ # Perl complains if we reference $DB::OUT only once
+ no warnings;
+ EnterDaemonMode unless defined $DB::OUT or get_debug;
+ use warnings;
+} # if
tunnel;