chiark / gitweb /
prefork-interp: increase check interval quite a bit
[chiark-utils.git] / perl / Prefork.pm
index 4798563e3ab5ef3e196d8a387cb012c2f790c5ac..afcf50e380a33fb71c1661ef14b2632aaef40ab1 100644 (file)
@@ -5,8 +5,9 @@ our @ISA = qw(Exporter);
 our @EXPORT = qw(initialisation_complete);
 
 use Carp;
-use POSIX;
 use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);
+use POSIX qw(_exit setsid);
+use Sys::Syslog;
 
 our $logger;
 
@@ -15,6 +16,13 @@ our $env_name = 'PREFORK_INTERP';
 our @call_fds;
 our $socket_path;
 
+sub fail ($) {
+  my ($m) = @_;
+  print STDERR "$0: prefork [$$]: $m\n";
+  flush STDERR;
+  _exit 127;
+}
+
 sub server_quit ($) {
   my ($m) = @_;
   syslog(LOG_INFO, "$0 prefork [$$]: $m, quitting");
@@ -23,7 +31,7 @@ sub server_quit ($) {
 
 # Returns in the executor process
 sub become_monitor () {
-  my $child = fork // fail("fork executor: $!");or 
+  my $child = fork // fail("fork executor: $!");
   if (!$child) {
     #---- executor ----
     open ::STDIN , "<& $call_fds[0]" or fail("dup for fd0");
@@ -115,8 +123,8 @@ sub initialisation_complete {
   foreach (@env_params) {
     $_ eq ($_+0) or croak "$env_name contains $_, not a number";
   }
-  open LISTEN, "<>&=$env_params[0]" or croak "listen fd: $!";
-  open CALL,   "<>&=$env_params[1]" or croak "listen fd: $!";
+  open LISTEN, "+>&=$env_params[0]" or croak "listen fd: $!";
+  open CALL,   "+>&=$env_params[1]" or croak "listen fd: $!";
   @call_fds = ($env_params[2], $env_params[3], 2);
 
   if (!$opts{no_openlog}) {
@@ -124,7 +132,7 @@ sub initialisation_complete {
            $opts{log_facility} // 'log_user');
   }
 
-  open NULL, "<>/dev/null" or croak "open /dev/null: $!";
+  open NULL, "+>/dev/null" or croak "open /dev/null: $!";
 
   #---- fork for server ----
 
@@ -183,7 +191,7 @@ sub initialisation_complete {
     my $rbits = '';
     vec($rbits, fileno(LISTEN), 1) = 1;
     my $ebits = $rbits;
-    my $nfound = select($rbits, '', $ebits, ($opts{check_interval} // 300));
+    my $nfound = select($rbits, '', $ebits, ($opts{check_interval} // 86400));
 
     if ($nfound) {
       if (accept(CALL, LISTEN)) {