diff --git a/application/clicommands/WebCommand.php b/application/clicommands/WebCommand.php index 7277a1fd4..67d50a343 100644 --- a/application/clicommands/WebCommand.php +++ b/application/clicommands/WebCommand.php @@ -55,20 +55,12 @@ class WebCommand extends Command $this->forkAndExit(); } echo "Serving Icinga Web 2 from directory $documentRoot and listening on $socket\n"; - $cmd = sprintf( - '%s -S %s -t %s %s', - readlink('/proc/self/exe'), - $socket, - $documentRoot, - Icinga::app()->getLibraryDir('/Icinga/Application/webrouter.php') - ); // TODO: Store webserver log, switch uid, log index.php includes, pid file - if ($fork) { - exec($cmd); - } else { - passthru($cmd); - } + pcntl_exec( + readlink('/proc/self/exe'), + ['-S', $socket, '-t', $documentRoot, Icinga::app()->getLibraryDir('/Icinga/Application/webrouter.php')] + ); } public function stopAction() @@ -93,6 +85,17 @@ class WebCommand extends Command // pcntl_wait($status); } else { // child + + // Replace console with /dev/null by first freeing the (lowest possible) FDs 0, 1 and 2 + // and then opening /dev/null once for every one of them (open(2) chooses the lowest free FD). + + fclose(STDIN); + fclose(STDOUT); + fclose(STDERR); + + fopen('/dev/null', 'rb'); + fopen('/dev/null', 'wb'); + fopen('/dev/null', 'wb'); } } }