control_threads.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. class control_threads extends cron
  5. {
  6. function __construct()
  7. {
  8. global $sql, $cfg, $argv;
  9. $aUnit = array();
  10. $sql->query('SELECT `id` FROM `control` ORDER BY `id` ASC');
  11. if(!$sql->num())
  12. return NULL;
  13. while($unit = $sql->get())
  14. $aUnit[$unit['id']] = '';
  15. $sql->query('SELECT `id` FROM `control_servers` LIMIT 1');
  16. if(!$sql->num())
  17. return NULL;
  18. $sql->query('SELECT `id`, `unit`, `game` FROM `control_servers` ORDER BY `unit` DESC');
  19. $all = $sql->num();
  20. while($server = $sql->get())
  21. $aUnit[$server['unit']][$server['game']] .= $server['id'].' ';
  22. if($argv[3] == 'control_scan_servers_route')
  23. cron::$seping = 50;
  24. foreach($aUnit as $unit => $aGame)
  25. {
  26. foreach($aGame as $game => $servers)
  27. {
  28. $aData = explode(' ', $servers);
  29. $num = count($aData)-1;
  30. $sep = $num > 0 ? ceil($num/cron::$seping) : 1;
  31. unset($aData[end($aData)]);
  32. $threads[] = cron::thread($sep, $game.' '.$unit, $aData);
  33. }
  34. }
  35. $cmd = '';
  36. foreach($threads as $thread)
  37. {
  38. foreach($thread as $screen => $servers)
  39. $cmd .= 'sudo -u www-data screen -dmS scan_'.(sys::first(explode(' ', $servers))).'_'.$screen.' taskset -c '.$cfg['cron_taskset'].' sh -c \"cd /var/enginegp; php cron.php '.$cfg['cron_key'].' '.$argv[3].' '.$servers.'\"; sleep 1;';
  40. }
  41. exec('screen -dmS control_threads_'.date('His', $start_point).' sh -c "'.$cmd.'"');
  42. return NULL;
  43. }
  44. }
  45. ?>