# History:
# (1) Ported bb-local.sh script to perl. (Ed Hill Feb 26, 1997)
#
-# $Id: spong-client.pl,v 1.21 2002/06/10 20:31:20 sljohnson Exp $
+# $Id: spong-client.pl,v 1.22 2002/06/24 16:59:22 sljohnson Exp $
use lib '@@LIBDIR@@';
$CHECKS = "";
-&load_config_files(); # Loads the user specified configuration information
-&init_logging(); # Initialize logging contexts
-Spong::Daemon::Daemonize # Daemonize if not signalling or debugging
- unless ($restart || $kill || $nosleep || $debug || $nodaemonize);
-&handle_signals(); # Set up handlers, and signal the current server if asked
+load_config_files(); # Loads the user specified configuration information
+init_logging(); # Initialize logging contexts
+
+# signal the current server is asked
+if ( $restart || $kill ) {
+ handle_signals();
+ exit 0;
+}
+
+if ( already_running() && ! ( $debug || $nosleep ) ) {
+ error( "spong-client 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-client.pid" ) unless $nosleep;
# Find our SPONGSLEEP value
&debug( "configuration file(s) 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.
+# This is part of the set up code. This daemonized the program and
+# this sets up the signal handlers
-sub handle_signals {
+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-server program.
+
+sub handle_signals {
+
# If the user gives us the --restart or --kill flags, then we signal the
# currently running spong-client 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-client.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-client 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-client.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
+# running.
sub already_running {
+
+ my $retcd = 0;
+
# if there is a PID file
if ( -f "$SPONGTMP/spong-client.pid" ) {
# Read the pid
close PID;
if ( kill 0,$pid ) {
- `ps -fp $pid | grep spong-client >/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-client >/dev/null`;
if ( ! $? ) {
- &error("Spong-client is already running as pid $pid");
- exit 1;
+ $retcd = 1;
}
}
}
+
+ return $retcd;
}
# Signal handlers...
sub exit_handler {
- &debug( "caught QUIT signal, exiting..." );
+ debug( "caught QUIT signal, exiting..." );
unlink "$SPONGTMP/spong-client.pid" if -f "$SPONGTMP/spong-client.pid";
exit(0);
}