server_delete.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. class server_delete extends cron
  5. {
  6. function __construct()
  7. {
  8. global $cfg, $sql, $argv;
  9. $sql->query('SELECT `id`, `uid`, `user`, `unit`, `tarif`, `game`, `slots`, `address`, `ddos` FROM `servers` WHERE `id`="'.$argv[3].'" AND `user`="-1" LIMIT 1');
  10. if(!$sql->num())
  11. return NULL;
  12. $server = $sql->get();
  13. if(!$server['uid'])
  14. return NULL;
  15. $sql->query('SELECT `install` FROM `tarifs` WHERE `id`="'.$server['tarif'].'" LIMIT 1');
  16. $tarif = $sql->get();
  17. $sql->query('SELECT `address`, `passwd`, `sql_login`, `sql_passwd`, `sql_port`, `sql_ftp` FROM `units` WHERE `id`="'.$server['unit'].'" LIMIT 1');
  18. $unit = $sql->get();
  19. include(LIB.'ssh.php');
  20. // Проверка ssh соединения с локацией
  21. if(!$ssh->auth($unit['passwd'], $unit['address']))
  22. return NULL;
  23. // Убить процессы
  24. $ssh->set('kill -9 `ps aux | grep s_'.$server['uid'].' | grep -v grep | awk '."'{print $2}'".' | xargs;'
  25. .'lsof -i@:'.$server['address'].' | awk '."'{print $2}'".' | xargs`; sudo -u server'.$server['uid'].' screen -wipe');
  26. // Директория игрового сервера
  27. $install = $tarif['install'].$server['uid'];
  28. $copys = 'screen -dmS r_copy_'.$server['uid'].' sh -c "';
  29. $scopy = $sql->query('SELECT `id`, `name` FROM `copy` WHERE `server`="'.$server['id'].'"');
  30. while($copy = $sql->get($scopy))
  31. {
  32. $copys .= 'rm /copy/'.$copy['name'].'.tar;';
  33. $sql->query('DELETE FROM `copy` WHERE `id`="'.$copy['id'].'" LIMIT 1');
  34. }
  35. $copys .= '";';
  36. $ssh->set($copys // Удаление резервных копий
  37. .'screen -dmS r_'.$server['uid'].' sh -c "rm -r '.$install.';' // Удаление директории сервера
  38. .'userdel server'.$server['uid'].'"'); // Удаление пользователя сервера c локации
  39. // Удаление ftp доступа
  40. $qSql = 'DELETE FROM users WHERE username=\''.$server['uid'].'\';'
  41. .'DELETE FROM quotalimits WHERE name=\''.$server['uid'].'\';'
  42. .'DELETE FROM quotatallies WHERE name=\''.$server['uid'].'\'';
  43. $ssh->set('screen -dmS ftp'.$server['uid'].' mysql -P '.$unit['sql_port'].' -u'.$unit['sql_login'].' -p'.$unit['sql_passwd'].' --database '.$unit['sql_ftp'].' -e "'.$qSql.'"');
  44. include(LIB.'games/games.php');
  45. // Очистка правил FireWall
  46. games::iptables($server['id'], 'remove', NULL, NULL, NULL, false, $ssh);
  47. // Очистка правил FireWall GEO
  48. if($server['ddos'])
  49. {
  50. $geo = $cfg['iptables'].'_geo';
  51. $country = $server['ddos'] == 2 ? 'AM,BY,UA,RU,KZ' : 'UA,RU';
  52. $ssh->set('iptables -D INPUT -p udp -d '.$ip.' --dport '.$port.' -m geoip ! --source-country '.$country.' -j DROP;'
  53. .'sed "`nl '.$geo.' | grep \"#'.$id.'\" | awk \'{print $1","$1+1}\'`d" '.$geo.' > '.$geo.'_temp; cat '.$geo.'_temp > '.$geo.'; rm '.$geo.'_temp;');
  54. }
  55. // Удаление заданий из crontab
  56. $sql->query('SELECT `address`, `passwd` FROM `panel` LIMIT 1');
  57. $panel = $sql->get();
  58. if(!$ssh->auth($panel['passwd'], $panel['address']))
  59. return NULL;
  60. $crons = $sql->query('SELECT `id`, `cron` FROM `crontab` WHERE `server`="'.$server['id'].'"');
  61. while($cron = $sql->get($crons))
  62. {
  63. $ssh->set('echo "" >> /etc/crontab && cat /etc/crontab');
  64. $crontab = str_replace($cron['cron'], '', $ssh->get());
  65. // Временный файл
  66. $temp = sys::temp($crontab);
  67. $ssh->setfile($temp, '/etc/crontab', 0644);
  68. $ssh->set("sed -i '/^$/d' /etc/crontab");
  69. $ssh->set('crontab -u root /etc/crontab');
  70. unlink($temp);
  71. $sql->query('DELETE FROM `crontab` WHERE `id`="'.$cron['id'].'" LIMIT 1');
  72. }
  73. // Обновление данных выделенного адреса
  74. $sql->query('SELECT `id`, `aid` FROM `address_buy` WHERE `server`="'.$server['id'].'" LIMIT 1');
  75. if($sql->num())
  76. {
  77. $add = $sql->get();
  78. $sql->query('UPDATE `address` set `buy`="0" WHERE `id`="'.$add['aid'].'" LIMIT 1');
  79. $sql->query('DELETE FROM `address_buy` WHERE `id`="'.$add['id'].'" LIMIT 1');
  80. }
  81. include(DATA.'web.php');
  82. $sql->query('SELECT `id` FROM `servers` WHERE `id`!="'.$server['id'].'" AND `user`="'.$server['user'].'" AND `unit`="'.$server['unit'].'" LIMIT 1');
  83. if($sql->num())
  84. {
  85. $server_sec = $sql->get();
  86. // Подготовка к удалению доп. услуги или обновление данных
  87. $webs = $sql->query('SELECT `id`, `type` FROM `web` WHERE `server`="'.$server['id'].'"');
  88. while($web = $sql->get($webs))
  89. {
  90. if($aWebInstall[$server['game']][$web['type']] == ('unit' || 'user'))
  91. $sql->query('UPDATE `web` set `server`="'.$server_sec['id'].'" WHERE `id`="'.$web['id'].'" LIMIT 1');
  92. else
  93. $sql->query('UPDATE `web` set `user`="0" WHERE `id`="'.$web['id'].'" LIMIT 1');
  94. }
  95. }else
  96. $sql->query('UPDATE `web` set `user`="0" WHERE `server`="'.$server['id'].'"');
  97. // Удаление различной информации игрового сервера
  98. $sql->query('DELETE FROM `admins_'.$server['game'].'` WHERE `server`="'.$server['id'].'"');
  99. $sql->query('DELETE FROM `plugins_install` WHERE `server`="'.$server['id'].'"');
  100. $sql->query('DELETE FROM `owners` WHERE `server`="'.$server['id'].'"');
  101. $sql->query('DELETE FROM `graph` WHERE `server`="'.$server['id'].'"');
  102. $sql->query('DELETE FROM `graph_day` WHERE `server`="'.$server['id'].'"');
  103. $sql->query('DELETE FROM `graph_hour` WHERE `server`="'.$server['id'].'"');
  104. $sql->query('DELETE FROM `servers` WHERE `id`="'.$server['id'].'" LIMIT 1');
  105. $sql->query('INSERT INTO `logs_sys` set `user`="0", `server`="'.$argv[3].'", `text`="Удаление игрового сервера #'.$argv[3].' ('.$server['game'].') unit: #'.$server['unit'].', tarif: #'.$server['tarif'].', slots: #'.$server['slots'].'", `time`="'.$start_point.'"');
  106. return NULL;
  107. }
  108. }
  109. ?>