control_scan_servers_down.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. class control_scan_servers_down extends cron
  5. {
  6. function __construct()
  7. {
  8. global $cfg, $sql, $argv, $start_point;
  9. $servers = $argv;
  10. unset($servers[0], $servers[1], $servers[2]);
  11. $sql->query('SELECT `address` FROM `control` WHERE `id`="'.$servers[4].'" LIMIT 1');
  12. if(!$sql->num())
  13. return NULL;
  14. $unit = $sql->get();
  15. $game = $servers[3];
  16. if(!array_key_exists($game, cron::$quakestat))
  17. return NULL;
  18. unset($servers[3], $servers[4]);
  19. $sql->query('SELECT `unit` FROM `control_servers` WHERE `id`="'.$servers[5].'" LIMIT 1');
  20. $server = $sql->get();
  21. $sql->query('SELECT `address`, `passwd`, `ram` FROM `control` WHERE `id`="'.$server['unit'].'" LIMIT 1');
  22. $unit = $sql->get();
  23. include(LIB.'ssh.php');
  24. // Проверка ssh соедниения пу с локацией
  25. if(!$ssh->auth($unit['passwd'], $unit['address']))
  26. return NULL;
  27. foreach($servers as $id)
  28. {
  29. $sql->query('SELECT `uid`, `address`, `status`, `autorestart` FROM `control_servers` WHERE `id`="'.$id.'" LIMIT 1');
  30. $server = $sql->get();
  31. if(!$server['autorestart'])
  32. continue;
  33. if($server['status'] != 'working')
  34. continue;
  35. if(!in_array(trim($ssh->get('quakestat -'.(cron::$quakestat[$game]).' '.$server['address'].' -retry 5 -interval 2 | grep -v frags | tail -1 | awk \'{print $2}\'')), array('DOWN', 'no')))
  36. continue;
  37. exec('sh -c "cd /var/enginegp; php cron.php '.$cfg['cron_key'].' control_server_action restart '.$game.' '.$id.'"');
  38. $sql->query('INSERT INTO `logs_sys` set `user`="0", `server`="'.$id.'", `text`="[Контроль] Перезагрука сервера: сервер завис", `time`="'.$start_point.'"');
  39. }
  40. return NULL;
  41. }
  42. }
  43. ?>