# (2) Converted checks to new plugin mechanism (Stephen Johnson May 28, 1999)
# Added user-configurable escalation mechanism
#
-# $Id: spong-network.pl,v 1.43 2002/06/10 20:34:58 sljohnson Exp $
+# $Id: spong-network.pl,v 1.44 2002/06/24 19:01:07 sljohnson Exp $
use Carp;
use lib "@@LIBDIR@@";
&load_config_files(); # Loads the user specified configuration information
&init_logging(); # Initialize logging contexts
-Spong::Daemon::Daemonize() # Daemonize if not signalling or a one-shot
- unless ($nosleep || $restart || $kill || $debug || $nodaemonize );
-&handle_signals(); # Set up handlers, and signal the current server if asked
+
+
+
+
+
+
+
+# signal the current server is asked
+if ( $restart || $kill ) {
+ handle_signals();
+ exit 0;
+}
+
+if ( already_running() && ! ( $debug || $nosleep ) ) {
+ error( "spong-network is already running" );
+ exit 1;
+}
+
+# Deamonize if not running from command line
+daemonize() if ! ( $debug || $nodaemonize || $nosleep );
+
+# Write our pid to the spong tmp directory.
+system( "echo $$ >$SPONGTMP/spong-network.pid" ) unless $nosleep;
# Find our SPONGSLEEP value
&debug( "host file loaded" );
}
-# This is part of the set up code, this sets up the signal handlers, and
-# handles any command line arguments that are given to us that tell us to
-# signal the current running spong-server program.
-sub handle_signals {
+# This is part of the set up code. This daemonizes the program and
+# this sets up the signal handlers
+
+sub daemonize {
+
+ # Daemonize
+ Spong::Daemon::Daemonize
# Clear out signal mask in case we inherit any blocked sigs
# listen for the HUP signal, and if we se that, we re-exec ourself.
$SIG{'QUIT'} = \&exit_handler;
+ $SIG{'TERM'} = \&exit_handler;
$SIG{'HUP'} = \&hup_handler;
+ $SIG{'USR1'} = \&hup_handler;
$SIG{'PIPE'} = \&pipe_handler;
+}
+
+
+# Handles any command line arguments that are given to us that tell us to
+# signal the current running spong-network program.
+
+sub handle_signals {
+
# If the user gives us the --restart or --kill flags, then we signal the
# currently running spong-network process, and tell it to either die, or
# re-exec itself (which causes it to re-read it's configuration files.
- if( $restart || $kill ) {
+ if( already_running() ) {
open( PID, "$SPONGTMP/spong-network.pid") || die "Can't find pid: $!";
my $pid = <PID>; chomp $pid;
close PID;
if( $kill ) {
&debug( "telling pid $pid to die" ); kill( 'QUIT', $pid );}
- exit(0);
+ } else {
+ debug("Can't find instance of spong-network running");
}
- # Check to see if we are already running
- &already_running() unless $nosleep;
-
- # Write our pid to the spong tmp directory.
-
- system( "echo $$ >$SPONGTMP/spong-network.pid" ) unless $nosleep;
}
-
-# This routine check to see if another instance of spong-server is already
-# running. If there is another instance, this instance will complain and die
+# This routine check to see if another instance of spong-network is already
+# running.
sub already_running {
+
+ my $retcd = 0;
+
# if there is a PID file
if ( -f "$SPONGTMP/spong-network.pid" ) {
# Read the pid
close PID;
if ( kill 0,$pid ) {
- `ps -f -p $pid | grep spong-network >/dev/null`;
+ my $myps;
+ # If $PS has a sort pipe, skip it
+ if ( $PS =~ m/^(.*)\|.*sort/ ) { $myps = $1 } else { $myps = $PS }
+ `$myps | grep -v grep | grep $pid | grep spong-network >/dev/null`;
if ( ! $? ) {
- &error("Spong-network is already running as pid $pid");
- exit 1;
+ $retcd = 1;
}
}
}
+
+ return $retcd;
}