X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=bin%2Ftunnel.pl;h=9472e88e5e510afa9c79775ebbc2fdb2df6fb4a5;hb=5bc2c378646d7c7d01ca4b382ac23f4870e75c52;hp=2ee85f0001592806c96725656bfcfbe648e23ff7;hpb=65420197aa633c6aabfec834730c7e87c93649cf;p=clearscm.git diff --git a/bin/tunnel.pl b/bin/tunnel.pl index 2ee85f0..9472e88 100755 --- a/bin/tunnel.pl +++ b/bin/tunnel.pl @@ -30,22 +30,22 @@ $Date: $ =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 @@ -68,6 +68,7 @@ use Pod::Usage; use Display; use Logger; +use Speak; use Utils; my $VERSION = '$Revision: 1.0 $'; @@ -89,27 +90,10 @@ my %opts = ( 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); @@ -124,6 +108,8 @@ sub interrupt { Report "Tunnel killed unexpectedly", 1; kill 'INT', $ssh->get_master_pid; + + return; } # interrupt sub tunnel() { @@ -142,6 +128,7 @@ RETRY: 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; @@ -154,10 +141,13 @@ RETRY: 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); @@ -168,6 +158,8 @@ RETRY: Report 'Ssh tunnel terminated unexpectedly - Attempting restart'; + undef $ssh; + goto RETRY; } # if @@ -188,6 +180,7 @@ GetOptions ( 'announce!', 'maxretries=i', 'daemon!', + 'append', ) || Usage; # Turn off daemon mode if we are in the Perl debugger; @@ -196,16 +189,21 @@ $opts{daemon} = 0 if defined $DB::OUT; 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;