a local XML-RPC server for ncic: daemonize and respond to TERM, RT#7780
[freeside.git] / FS / FS / Daemon.pm
index 7e0d45c..38e6d75 100644 (file)
@@ -1,7 +1,7 @@
 package FS::Daemon;
 
 use vars qw( @ISA @EXPORT_OK );
-use vars qw( $pid_dir $me $pid_file $sigint $sigterm $logfile );
+use vars qw( $pid_dir $me $pid_file $sigint $sigterm $NOSIG $logfile );
 use Exporter;
 use Fcntl qw(:flock);
 use POSIX qw(setsid);
@@ -12,10 +12,15 @@ use Date::Format;
 #avoid duplicate code.  eventually this should use something from CPAN.
 
 @ISA = qw(Exporter);
-@EXPORT_OK = qw( daemonize1 drop_root daemonize2 sigint sigterm logfile );
+@EXPORT_OK = qw(
+  daemonize1 drop_root daemonize2 myexit logfile sigint sigterm
+);
+%EXPORT_TAGS = ( 'all' => [ @EXPORT_OK ] );
 
 $pid_dir = '/var/run';
 
+$NOSIG = 0;
+
 sub daemonize1 {
   $me = shift;
 
@@ -38,8 +43,10 @@ sub daemonize1 {
   #$SIG{CHLD} =  \&REAPER;
   $sigterm = 0;
   $sigint = 0;
-  $SIG{INT}  = sub { warn "SIGINT received; shutting down\n"; $sigint++;  };
-  $SIG{TERM} = sub { warn "SIGTERM received; shutting down\n"; $sigterm++; };
+  unless ( $NOSIG ) {
+    $SIG{INT}  = sub { warn "SIGINT received; shutting down\n"; $sigint++;  };
+    $SIG{TERM} = sub { warn "SIGTERM received; shutting down\n"; $sigterm++; };
+  }
 }
 
 sub drop_root {
@@ -74,7 +81,13 @@ sub sigterm { $sigterm; }
 
 sub logfile { $logfile = shift; } #_logmsg('test'); }
 
+sub myexit {
+  unlink $pid_file if -e $pid_file;
+  exit;  
+}
+
 sub _die {
+  die @_ if $^S; # $^S = 1 during an eval(), don't break exception handling
   my $msg = shift;
   unlink $pid_file if -e $pid_file;
   _logmsg($msg);
@@ -90,3 +103,4 @@ sub _logmsg {
   close $log;
 }
 
+1;