threads.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. if (!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://' . $_SERVER['SERVER_NAME'] . '/404'));
  4. class threads extends cron
  5. {
  6. function __construct()
  7. {
  8. global $sql, $cfg, $argv;
  9. $aUnit = array();
  10. $sql->query('SELECT `id` FROM `units` 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 `servers` LIMIT 1');
  16. if (!$sql->num())
  17. return NULL;
  18. $sql->query('SELECT `id`, `unit`, `game` FROM `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] == 'scan_servers_route')
  23. cron::$seping = 50;
  24. foreach ($aUnit as $unit => $aGame) {
  25. foreach ($aGame as $game => $servers) {
  26. $aData = explode(' ', $servers);
  27. $num = count($aData) - 1;
  28. $sep = $num > 0 ? ceil($num / cron::$seping) : 1;
  29. unset($aData[end($aData)]);
  30. $threads[] = cron::thread($sep, $game . ' ' . $unit, $aData);
  31. }
  32. }
  33. $cmd = '';
  34. foreach ($threads as $thread) {
  35. foreach ($thread as $screen => $servers)
  36. $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;';
  37. }
  38. exec('screen -dmS threads_' . date('His', $start_point) . ' sh -c "' . $cmd . '"');
  39. return NULL;
  40. }
  41. }
  42. ?>