protected function execute(InputInterface $input, OutputInterface $output) { $logger = $this->getConsoleLogger($output); $file = $input->getArgument('config-file'); // Test if config file exists if (!file_exists($file) || !is_readable($file)) { $msg = "Configuration file '{$file}' does not exists or is not readable'"; throw new \InvalidArgumentException($msg); } $params = (include $file); $port = $params['port']; $config = new StandaloneServer\Config($params); $this->logServerConfig($logger, $config); $this->server = new StandaloneServer($config, $logger); $pid_file = $config->getPidFile(); $log_file = $config->getLogFile(); if (file_exists($log_file)) { $output->writeln('---------------------------------------------------------'); $output->writeln("Content of log file ({$log_file})"); $output->writeln('---------------------------------------------------------'); $output->writeln($this->server->getOutput()); $output->writeln('---------------------------------------------------------'); } $isRunning = false; try { $pid = $this->server->getPid(); if (!$this->server->isProcessRunning()) { $logger->error("Not running but pid file exists ({$pid_file}) and pid found ({$pid})"); $msg = "Server not running but pid exists (pid: {$pid}) in pid_file ({$pid_file}). Please restart."; } else { $isRunning = true; $msg = "Server is running on port '{$port}' (pid: {$pid})"; } } catch (PjbException\PidCorruptedException $e) { // Pid file corrupted $logger->critical("Cannot find server pid, your '{$pid_file}' is corrupted. Remove it."); $msg = 'Server not running (Critical error: pid file corrupted)'; } catch (PjbException\PidNotFoundException $e) { $logger->info("Pid file '{$pid_file}' not exists, assuming server is down."); $msg = "Server not running on port '{$port}' (no pid file found)"; } catch (\Exception $e) { $logger->error('Unexpected exception when testing pid file.'); $msg = 'Cannot test server status'; } $output->writeln($msg); return $isRunning ? 0 : 1; }
protected function execute(InputInterface $input, OutputInterface $output) { $logger = $this->getConsoleLogger($output); $file = $input->getArgument('config-file'); // Test if config file exists if (!file_exists($file) || !is_readable($file)) { $msg = "Configuration file '{$file}' does not exists or is not readable'"; throw new \InvalidArgumentException($msg); } $params = (include $file); $port = $params['port']; $config = new StandaloneServer\Config($params); $logger->notice("Starting the server on port '{$port}' and config file '{$file}'"); $this->logServerConfig($logger, $config); $this->server = new StandaloneServer($config, $logger); if ($this->server->isProcessRunning()) { $pid = $this->server->getPid(); $output->writeln("PjbServer is already running on port {$port} with pid {$pid}, skipping start"); } else { $this->server->start(); $output->writeln("Server successfully started on port {$port}"); } return 0; }
public function testGetPidCorrupted() { $config = $this->server->getConfig(); $pid_file = $config->getPidFile(); $this->server->start(); $pid = $this->server->getPid(); $this->assertInternalType('int', $pid); // pretend pid file is corrupted file_put_contents($pid_file, 'invalidpid'); try { $this->server->getPid(); $this->assertFalse(true, "PidCorrupted exception was not throwned"); } catch (\PjbServer\Tools\Exception\PidCorruptedException $e) { $this->assertTrue(true, "PID Corrupted exception was correctly thrown"); } // restore pid file_put_contents($pid_file, $pid); $this->assertInternalType('int', $this->server->getPid()); $this->assertEquals($pid, $this->server->getPid()); $this->server->stop(); }