]> git.etc.gen.nz Git - spong.git/commitdiff
added check to abort spong-network if it is already running
authorStephen L Johnson <sjohnson@monsters.org>
Tue, 14 Mar 2000 23:11:05 +0000 (23:11 +0000)
committerStephen L Johnson <sjohnson@monsters.org>
Tue, 14 Mar 2000 23:11:05 +0000 (23:11 +0000)
src/spong-network.pl

index 3cd967fdd2da35c75fea3b4e8796341cd6b1c00c..1b95974801eaf4ecba05c0d01c642d4e41ae6de4 100755 (executable)
@@ -36,8 +36,8 @@ srand( time() ^ ($$ + ($$ << 15 )) );
 
 $debug = $restart = $kill = 0;
 
-Getopt::Long::Configure('pass_through');
-if ( ! GetOptions("debug:i" => \$debuglevel, "restart" => \$restart, 
+#Getopt::Long::Configure('pass_through');
+if ( ! GetOptions("debug=i" => \$debuglevel, "restart" => \$restart, 
           "kill" => \$kill, "nosleep|refresh" => \$nosleep ) ) {
    &usage();
    exit 1;
@@ -65,7 +65,7 @@ Spong::Daemon::Daemonize()  # Daemonize if not signalling or a one-shot
 
 while( 1 ) {
    foreach $host ( @HOSTS_LIST ) {
-      &debug( "checking network services ($checks) on $host" );
+      &debug( "checking network services on $host" );
 
       my $check;
       foreach $check (('ping',split(/\s+/,$HOSTS{$host}->{'services'}))) {
@@ -343,12 +343,34 @@ sub handle_signals {
       exit(0);
    }
 
+   # Check to see if we are already running 
+   &already_running();
+
    # 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
+
+sub already_running {
+   # if there is a PID file
+   if ( -f "$SPONGTMP/spong-network.pid" ) {
+      # Read the pid
+      open( PID, "$SPONGTMP/spong-network.pid" ) || die "Can't open pid: $!";
+      my $pid = <PID>; chomp $pid;
+      close PID;
+
+      if ( kill 0,$pid ) {
+         &error("Spong-network is already running as pid $pid");
+         exit 1;
+      }
+   }
+}
+
+
 # Output functions, one for debugging information, the other for errors.
 
 sub debug { Spong::Log::debug($_[0],$_[1]); }