コード例 #1
0
ファイル: SHM.php プロジェクト: brutalsys/rmq_worker
 public function __construct(Server $server, $child = false)
 {
     $this->server = $server;
     $this->config = $server->getConfig();
     $this->child = $child;
     $this->tmp_file = $server->shm_tmp_file;
     while (!file_exists($this->tmp_file)) {
         touch($this->tmp_file);
         chmod($this->tmp_file, $this->config['shared_memory.permissions']);
     }
     if (!$this->child) {
         $this->logger = $server->getLogger($this->config['log_base'] . '.SHM');
     } else {
         $this->logger = $server->getLogger($this->config['log_base'] . '.workerSHM.' . $child);
     }
     $this->open();
 }
コード例 #2
0
ファイル: Consumer.php プロジェクト: brutalsys/rmq_worker
 public function __construct(Server $server, $id = false)
 {
     $this->worker_class = $server->getWorkerClass();
     $this->shm = new SHM($server, $id);
     $this->shm->write($id, false);
     $this->id = $id ?: getmypid();
     $this->server = $server;
     $this->configureLogger();
     if (extension_loaded('pcntl')) {
         @cli_set_process_title("RMQ Worker [Master: {$server->pid}]");
     }
     $this->configureSignals();
     if (extension_loaded('pcntl')) {
         pcntl_signal_dispatch();
     }
     $this->config = clone $server->config;
     set_error_handler([$this, "errorHandler"]);
     register_shutdown_function([$this, "check_for_fatal"]);
     $this->start();
 }
コード例 #3
0
ファイル: Server.php プロジェクト: brutalsys/rmq_worker
 private function daemonize()
 {
     $user = posix_getpwnam($this->config['user']);
     $group = posix_getgrnam($this->config['group']);
     if (!$user) {
         $this->logger->addEmergency("The user " . $this->config['user'] . ' could not be found');
         exit(1);
     } elseif (!$group) {
         $this->logger->addEmergency('The group ' . $this->config['group'] . ' could not be found');
         exit(1);
     } elseif ($this->config['user'] != $this->config['group'] && !in_array($user, $group['members'])) {
         $this->logger->addEmergency("The user " . $this->config['user'] . ' is not member of group ' . $this->config['group']);
         exit(1);
     }
     $this->logger->addNotice("Daemonizing Server Process");
     $pid = pcntl_fork();
     if ($pid) {
         pcntl_waitpid(-1, $status, WNOHANG);
         exit(0);
     } else {
         $id = posix_setsid();
         if ($id < 0) {
             $this->logger->addCritical('Can not create new session ID');
             exit(1);
         }
         posix_setuid($user['uid']);
         posix_setgid($group['gid']);
         $server = new Server($this->worker_class, true);
         $server->start();
         exit(0);
     }
 }