function check_job_servers() { //loop schemas foreach (Doo::db()->find('Schemata') as $s) { $schema_id = $s->id; //enabled config with PID foreach (Doo::db()->find('GearmanJobServers', array('where' => 'local = 1 AND enabled = 1 AND schema_id = ' . $schema_id)) as $js) { if (!empty($js->pid)) { //init $p = new Process(); $p->setPid($js->pid); //check status if ($p->status()) { continue; } } //let start $js->pid = $this->start_local_job_server($js->id, $js->port, $s->id); $js->update(); } //disabled config foreach (Doo::db()->find('GearmanJobServers', array('where' => 'local = 1 AND enabled = 0 AND pid IS NOT NULL AND schema_id = ' . $schema_id)) as $js) { //stop $p = new Process(); $p->setPid($js->pid); $p->stop(); $js->pid = null; $js->update(array('setnulls' => true)); } } }
/** * Starts Budabot instance. * Calling this more than once has no effect unless the bot is not running. */ public static function startBudabot() { if (self::$botProcess) { return; } // delete old DB-file if it exists @unlink(ROOT_PATH . '/data/' . self::$vars['DB Name']); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $phpExec = realpath(ROOT_PATH . "\\win32\\php.exe") . " -c php-win.ini"; } else { $phpExec = "php"; } // start budabot instance $process = new Process(); $process->setCommand("{$phpExec} -f tests/helpers/test_main.php"); $path = self::$parameters['budabot_log']; if (is_string($path)) { $file = fopen($path, 'w'); $process->setDescriptorspec(array(1 => $file, 2 => $file)); } else { if ($path) { $process->setDescriptorspec(array()); } else { $process->setDescriptorspec(array(1 => array('file', 'nul', 'w'), 2 => array('file', 'nul', 'w'))); } } $process->setWorkingDir(ROOT_PATH); if (!$process->start()) { throw new Exception("Failed to start Budabot!"); } // make sure that the bot instance is terminated on exit register_shutdown_function(function () use($process) { $process->stop(); }); self::$botProcess = $process; }
public static function ensureRunning($cmd, $pidfile, $restart = false) { $pidfile = '/var/run/' . $pidfile; // get pid from pidfile, protecting against invalid data $p1 = null; if (file_exists($pidfile) && is_readable($pidfile)) { $pid = substr(file_get_contents($pidfile), 0, 64); $p1 = new Process(); $p1->setPid($pid); } if ($restart && $p1) { $p1->stop(); } // check whether process with this pid is running if (!$p1 || !$p1->status()) { // check that we can write the pidfile, to avoid spawning endless processes if (file_put_contents($pidfile, 'test')) { $p2 = new Process($cmd); file_put_contents($pidfile, $p2->getPid()); } return true; } return false; }
public function testPublishKeyNameWithNamespaceAndRoomSet() { $p = new Process('redis-cli monitor > redis.log'); sleep(1); // Running this should produce something that's visible in `redis-cli monitor` $emitter = new Emitter(NULL, array('host' => '127.0.0.1', 'port' => '6379')); $emitter->of('/nsp')->to('rm')->emit('yolo', 'data'); $p->stop(); $contents = file_get_contents('redis.log'); unlink('redis.log'); $this->assertTrue(strpos($contents, 'socket.io#/nsp#rm#') !== FALSE); }
function check_workers() { //loop schemas foreach (Doo::db()->find('Schemata') as $s) { $schema_id = $s->id; $funcs = Doo::db()->fetchAll("SELECT a.id, a.schema_id, b.function_name, a.worker_count, a.enabled\r\n\t\t\t\tFROM gearman_functions a\r\n\t\t\t\tLEFT JOIN gearman_function_names b\r\n\t\t\t\tON a.function_name_id = b.id\r\n\t\t\t\tWHERE enabled = 1\r\n\t\t\t\tAND schema_id = {$schema_id}"); //read worker config $worker_functions = array(); foreach ($funcs as $f) { $worker_functions[$f["function_name"]] = $f["worker_count"]; } //Loop enabled config foreach ($worker_functions as $function => $worker_count) { //find current workers for the function $runningWorkers = Doo::db()->find('GearmanWorkers', array('where' => "function_name = '{$function}' AND schema_id = {$schema_id}")); //scan workers to make sure they are still running foreach ($runningWorkers as $worker) { //init $p = new Process(); $p->setPid($worker->pid); //check status if (!$p->status()) { //crashed! Lets re init $gw = new GearmanWorkers(); $gw->pid = $this->start_worker($function, $schema_id); $gw->function_name = $function; $gw->schema_id = $schema_id; $gw->insert(); //remove crashed pid $worker->delete(); } } //calc delta workers $delta = $worker_count - count($runningWorkers); //add missing workers if ($delta > 0) { for ($i = 0; $i < $delta; $i++) { //run process $sw = new GearmanWorkers(); $sw->pid = $this->start_worker($function, $schema_id); $sw->function_name = $function; $sw->schema_id = $schema_id; $sw->insert(); } } //remove extra workers if ($delta < 0) { //find current workers for the function $runningWorkers = Doo::db()->find('GearmanWorkers', array('where' => "function_name = '{$function}' AND schema_id = {$schema_id}")); for ($i = 0; $i < abs($delta); $i++) { //kill process $worker = $runningWorkers[$i]; $p = new Process(); $p->setPid($worker->pid); $p->stop(); $worker->delete(); } } } //disabled config $funcs = Doo::db()->fetchAll("SELECT a.id, a.schema_id, b.function_name, a.worker_count, a.enabled\r\n\t\t\t\tFROM gearman_functions a\r\n\t\t\t\tLEFT JOIN gearman_function_names b\r\n\t\t\t\tON a.function_name_id = b.id\r\n\t\t\t\tWHERE enabled = 0\r\n\t\t\t\tAND schema_id = {$schema_id}"); foreach ($funcs as $f) { $function = $f["function_name"]; //find current workers for the function $disabledWorkers = Doo::db()->find('GearmanWorkers', array('where' => "function_name = '{$function}' AND schema_id = {$schema_id}")); //scan workers and kill to disable foreach ($disabledWorkers as $worker) { //init $p = new Process(); $p->setPid($worker->pid); $p->stop(); $worker->delete(); } } } }
public static function stop() { Process::stop('winvnc4'); Process::stop('php'); }
function stop() { //stop function global $conf; global $db; $result = $db->query("SELECT count(*) AS C FROM pid"); $row = $result->fetchArray(); // output data of each row $result = $db->query("SELECT * FROM pid LIMIT 1"); $row = $result->fetchArray(); $process = new Process(); $process->setPid($row["pid"]); if (!$process->status()) { $sql = "DELETE FROM pid"; $result = $db->query($sql); $return_array["info"] = "process already dead"; } else { $response_array["pid"] = $process->getPid(); $process->stop(); $sql = "DELETE FROM pid"; $result = $db->query($sql); $return_array["info"] = "process stopped"; } sleep(1); cleanpl(); $return_array["status"] = 0; return $return_array; }