Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Автоподъем серверов Quakehost

, Скрипт подъема сервера
Статус пользователя eagle-ru
сообщение 21.4.2011, 12:43
Сообщение #1


Стаж: 14 лет

Сообщений: 41
Благодарностей: 11
Полезность: 205



Кто пользуется хостингом от Quakehost.ru знают, что у них нет автоматического подъема сервера при падении. Для этих целей был написан php-скрипт. Принцип работы: cкрипт мониторит (пингует) сервер, если сервер не отвечает, посылается команда на перезагрузку сервера. Помимо этого скрипт ведет логи, когда сервер не отвечал на запросы и был перезагружен.

Скрипт:
CODE
// Автор: .:EAGLE:.
// Скрипт для автоподъема сервера на хостинге Quakehost.ru .
// ICQ: 477079475
<?php
function cs_scan($ip,$port) {
$fp = @fsockopen("udp://$ip",$port,$errno,$errstr);
@stream_set_timeout($fp,1,0); @stream_set_blocking($fp,true);
if (!$fp) {
unset($data);
$data[address] = $ip.":".$port;
$data[gamemod] = "-";
$data[hostname] = "-";
$data[mapname] = "-";
$data[players] = "0";
$data[maxplayers] = "0";
$data[password] = "-";
$data[datatype] = "-";
$data[version] = "-";
$data[description] = "-";
$data[server_type] = "-";
$data[server_os] = "-";
$data[server_secure] = "-";
$data[server_bots] = "-";
return $data;
}
else {
fwrite($fp,"\xFF\xFF\xFF\xFFTSource Engine Query\x00");
$buffer = fread($fp,4096);
if (!$buffer) {
fclose($fp);
unset($data);
$data[address] = $ip.":".$port;
$data[gamemod] = "-";
$data[hostname] = "-";
$data[mapname] = "-";
$data[players] = "0";
$data[maxplayers] = "0";
$data[password] = "-";
$data[datatype] = "-";
$data[version] = "-";
$data[description] = "-";
$data[server_type] = "-";
$data[server_os] = "-";
$data[server_secure] = "-";
$data[server_bots] = "-";
return $data;
}
$second_packet = $buffer;
if (strlen($second_packet) > 0) {
$reverse_check = dechex(ord($buffer[8]));
if ($reverse_check[0] == "1") {
$tmp = $buffer;
$buffer = $second_packet;
$second_packet = $tmp;
}
$buffer = substr($buffer, 13);
$second_packet = substr($second_packet, 9);
$buffer = trim($buffer.$second_packet);
$buffer = trim(substr($buffer, 4));
if (!trim($buffer)) {
unset($data);
$data[address] = $ip.":".$port;
$data[gamemod] = "-";
$data[hostname] = "-";
$data[mapname] = "-";
$data[players] = "0";
$data[maxplayers] = "0";
$data[password] = "-";
$data[datatype] = "-";
$data[version] = "-";
$data[description] = "-";
$data[server_type] = "-";
$data[server_os] = "-";
$data[server_secure] = "-";
$data[server_bots] = "-";
return $data;
}
}
}
fclose($fp);
unset($data);
$tmp = explode("\x00", $buffer);
$place = strlen($tmp[0].$tmp[1].$tmp[2].$tmp[3].$tmp[4]) + 5;
$data[address] = $ip.":".$port;
$data[gamemod] = $tmp[3];
$data[hostname] = $tmp[1];
$data[mapname] = $tmp[2];
$data[players] = ord($buffer[$place]);
$data[maxplayers] = ord($buffer[$place + 1]);
$data[password] = ord($buffer[$place + 5]);
$data[datatype] = $buffer[0]; // m для стрим инфы
$data[version] = ord($buffer[$place + 2]); // версия
$data[description] = $tmp[4];
$data[server_type] = $buffer[$place + 3]; // D выделный или L простой
$data[server_os] = $buffer[$place + 4]; // W под виндой или L под линуксом
$data[server_secure] = ord($tmp[14]); // VAC
$data[server_bots] = ord($tmp[15]); // кол-во ботов
if (substr_count($data[hostname],"banned") == 1) {
$data[hostname] = " You have been banned from this server";
$data[mapname] = "-";
}
if ($data == "Server offline") {
unset($data);
$data[hostname] = "Server Offline";
$data[mapname] = "-";
$data[players] = "0";
$data[maxplayers] = "0";
}
return $data;
}
?>
<?
$ip="***"; // ip сервера
$port="***"; // порт сервера
$data = cs_scan($ip,$port);
if ($data[hostname]=="-") // Если сервер не доступен
{
// Перезагрузка сервера
file_get_contents('http://**ip**/services.php?email=***@&password=***&server=***&options=&act=restart'); // вводим email и password от панели управления хостигом
// Запись лога в файл serverup_log.txt даты и время падения сервера
date_default_timezone_set('Europe/Volgograd');
$datetime_now = date ("d.m.Y H:i:s");
$fp = fopen("serverup_log.txt", "a"); // Открываем файл в режиме записи
$mytext = "Server offline - $datetime_now \r\n"; // Исходная строка
$test = fwrite($fp, $mytext); // Запись в файл
fclose($fp); //Закрытие файла
}
else
echo "<b>Server - <font color='green'>Online.</font></b>"; // Иначе сервер Online
?>

Пример лога сервера:
Server offline - 12.04.2011 22:39:06
Server offline - 13.04.2011 16:15:18
Server offline - 14.04.2011 03:09:17
Server offline - 18.04.2011 02:51:06
Server offline - 18.04.2011 16:39:07
Server offline - 20.04.2011 20:48:05

Установка:
1) Для работы скрипта необходим хостинг с поддержкой php и cron
2) Редактируем скрипт - необходимо изменить на ваши данные места помеченные ***. Данные можете узнать из исходного кода страницы в панеле управления хостингом CS 1.6 Quakehost.ru
3) Заливаем скрипт на хостинг с расширением *.php
4) На хостинге создем пустой текстовый файл (*.txt) с именем - serverup_log.txt
5) Создаем задание в cron на выполнение php-скрипта (Лучше время выполнения ставить каждую минуту).
6) Обязательно! Откройте порты у хостера. Проще всего просто написать в тех поддержку и открыть порты соответственно вашего сервера CS 1.6, т.е. если ip вашего сервера 77.777.777.777:27039 - нужно на хостиге открыть порт 27039.
7) Готово. Тестируем, кладем сервер через панель управления, через минуту сервер восстанет =).

Хостинг от uCoz не подходит!!!

Могу посоветовать хороший хостинг, с поддержкой всего, что нужно: www.shneider-host.ru. Или можно найти бесплатный хостинг, но лучше потратить 30 рублей, чем потом узнать, что и сервер, и сайт лежит =).

Отредактировал: eagle-ru, - 21.4.2011, 22:07
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 4 раз
   Цитировать сообщение
Статус пользователя STILL47DEATH
сообщение 21.4.2011, 21:12
Сообщение #2


Стаж: 16 лет

Сообщений: 662
Благодарностей: 83
Полезность: 150

eagle-ru,
1. Код надо пихать в соответствующий тег
2. Я правильно понял, что скрипт пингует сервер и если тот не отвечает, то идёт команда на ребут сервера, так? Но сколько раз перед ребутом идёт проверка? Ведь когда карта меняется сервер зачастую показывается как оффлайн.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя eagle-ru
сообщение 21.4.2011, 22:04
Сообщение #3


Стаж: 14 лет

Сообщений: 41
Благодарностей: 11
Полезность: 205

Цитата(STILL47DEATH @ 21.4.2011, 23:12) *
eagle-ru,
1. Код надо пихать в соответствующий тег
2. Я правильно понял, что скрипт пингует сервер и если тот не отвечает, то идёт команда на ребут сервера, так? Но сколько раз перед ребутом идёт проверка? Ведь когда карта меняется сервер зачастую показывается как оффлайн.


"Я правильно понял, что скрипт пингует сервер и если тот не отвечает, то идёт команда на ребут сервера, так?" - да, так.
Проверка идет так часто на сколько ты настроишь задание в cron. Я поставил - каждую минуту. Если будет меняться карта сервер все равно будет отвечать на запросы, а следовательно online.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя STILL47DEATH
сообщение 22.4.2011, 20:46
Сообщение #4


Стаж: 16 лет

Сообщений: 662
Благодарностей: 83
Полезность: 150

Цитата(eagle-ru @ 21.4.2011, 23:04) *
"Я правильно понял, что скрипт пингует сервер и если тот не отвечает, то идёт команда на ребут сервера, так?" - да, так.
Проверка идет так часто на сколько ты настроишь задание в cron. Я поставил - каждую минуту. Если будет меняться карта сервер все равно будет отвечать на запросы, а следовательно online.

ну как скажешь, просто я знаю, что при смене карты скрипт не всегда определяет онлайн сервера правильно!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя eagle-ru
сообщение 22.4.2011, 21:38
Сообщение #5


Стаж: 14 лет

Сообщений: 41
Благодарностей: 11
Полезность: 205

Тестировали, если все правильно настроить - работает стабильно. Данный скрипт установлен уже на многих серверах Quakehost.ru, но так как тех. поддержка не захотела оказывать помощь в установке скрипта на клиентские сервера, решил выложить скрипт в public.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
cs-portal
сообщение 23.4.2011, 23:28
Сообщение #6
Стаж: 14 лет

Сообщений: 8181
Благодарностей: 2709
Полезность: 0

хоть убей
ну не вижу я в скрипте пользы так как если сервер НЕ отвечает ето одно из двух

1-сервер завис - то есть зависло его fps. и он не реагирует
2-сервер выключен полностью

скрипт же не запускает .sh / .exe
а на команду перезапуска если сервер ВИСИТ он НЕ ответит.

Отредактировал: cs-portal, - 23.4.2011, 23:30
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя StSatan
сообщение 24.4.2011, 11:54
Сообщение #7
Стаж: 15 лет

Сообщений: 13
Благодарностей: 1
Полезность: 0

Чёто я сколько не пытался использовать этот скрипт у меня сервер просто каждую минуту перезагружался через крон, ип и порт указывал правильно

Команду перезапуска заменить можно командой старт:
Тоесть вот эту строчку
Цитата
http://**ip**/services.php?email=***@&password=***&server=***&options=&act=restart

поменять на эту
Цитата
http://**ip**/services.php?email=***@&password=***&server=***&options=&act=start
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя StSatan
сообщение 24.4.2011, 14:41
Сообщение #8
Стаж: 15 лет

Сообщений: 13
Благодарностей: 1
Полезность: 0

У кто-нибудь уже сделал себе автоподъём? отпишитесь...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sw1ch
сообщение 24.4.2011, 17:30
Сообщение #9
Стаж: 13 лет

Сообщений: 616
Благодарностей: 228
Полезность: < 0

Гавно хостинг, лучше перейти на другой, дороже, чем у них арендовать сервер - проверенно на своём опыте.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя eagle-ru
сообщение 24.4.2011, 22:35
Сообщение #10


Стаж: 14 лет

Сообщений: 41
Благодарностей: 11
Полезность: 205

Цитата(cs-portal @ 24.4.2011, 1:28) *
хоть убей
ну не вижу я в скрипте пользы так как если сервер НЕ отвечает ето одно из двух

1-сервер завис - то есть зависло его fps. и он не реагирует
2-сервер выключен полностью

скрипт же не запускает .sh / .exe
а на команду перезапуска если сервер ВИСИТ он НЕ ответит.


Так вот если сервер не отвечает - значит он не работает, завис.
Скрипт посылает запрос на перезагрузку не через rcon (не путать с cron!!!), так вот выполнив этот запрос на сервере хостинга происходит перезагрузка сервера. (Перезапуск консоли сервера).
И тут не важно ответит тебе сервер или нет. Перезагрузка идет на сервере-хостинге.

Цитата(StSatan @ 24.4.2011, 13:54) *
Чёто я сколько не пытался использовать этот скрипт у меня сервер просто каждую минуту перезагружался через крон, ип и порт указывал правильно

Команду перезапуска заменить можно командой старт:
Тоесть вот эту строчку

поменять на эту.

Вот тут очень важно!!! Открыть порты на хостинге сайта (где скрипт php)! Поэтому у тебя не работает. Проверить это можно выполнив скрипт через строку адреса в браузере - если сервер работает и порты открыты - должна появиться строка - Server - Online.

Начет команды перезапуска. Заменить нельзя! Т.к. на данном хостинге очень часты случаи когда сервер не работает, а в статусе панеле управления висит надпись online. Команда перезагрузки (restart) же перезапустит сервер даже если панель говорит, что сервер online. Скрипт не "слушает" что пишет панель. Он сам проверяет доступность сервера. Панель управления данного хостинга далека от совершенства.

Еще раз повторюсь данный скрипт прекрасно работает уже на многих серверах. Так же стоит и на моем личном сервере.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
cs-portal
сообщение 25.4.2011, 14:01
Сообщение #11
Стаж: 14 лет

Сообщений: 8181
Благодарностей: 2709
Полезность: 0

все ясно я думал скипт напрямую может запускать. а не через панель
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя StSatan
сообщение 26.4.2011, 12:44
Сообщение #12
Стаж: 15 лет

Сообщений: 13
Благодарностей: 1
Полезность: 0

Цитата
Вот тут очень важно!!! Открыть порты на хостинге сайта (где скрипт php)! Поэтому у тебя не работает. Проверить это можно выполнив скрипт через строку адреса в браузере - если сервер работает и порты открыты - должна появиться строка - Server - Online.

Ух, щас конечно ещё раз попробую, какие порты открывать на хостинге где php скрипт залит те которые у сервера? Тоесть у моих серверов порты 27026 и 27030, я должен на хосте сайта в тех. поддержке попросить открыть эти же самые порты?

Отредактировал: StSatan, - 26.4.2011, 12:53
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя StSatan
сообщение 26.4.2011, 19:22
Сообщение #13
Стаж: 15 лет

Сообщений: 13
Благодарностей: 1
Полезность: 0

На хосте сайта отказали в открытии портов, якобы через них могут другие люди мониторинг сделать ) чё делать?О_о
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя eagle-ru
сообщение 26.4.2011, 19:48
Сообщение #14


Стаж: 14 лет

Сообщений: 41
Благодарностей: 11
Полезность: 205

Цитата(StSatan @ 26.4.2011, 14:44) *
Ух, щас конечно ещё раз попробую, какие порты открывать на хостинге где php скрипт залит те которые у сервера? Тоесть у моих серверов порты 27026 и 27030, я должен на хосте сайта в тех. поддержке попросить открыть эти же самые порты?


Да именно эти порты. Если не открывают никак, то тут выход один, купить за 30 руб. хостинг (порты открывают, скрипт работает, сам пользуюсь), ссылку на который Я дал выше. Или найти более дешевый/бесплатный хостинг с php и cron, тогда заранее уточни про порты.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя StSatan
сообщение 26.4.2011, 20:46
Сообщение #15
Стаж: 15 лет

Сообщений: 13
Благодарностей: 1
Полезность: 0

Ну раз на www.shneider-host.ru открывают порты я тогда на него перееду) раз уж проверено

Странный хост всего 30р месяц за 500мб хдд крон пхп и т.д. не кидалово?)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя eagle-ru
сообщение 26.4.2011, 21:39
Сообщение #16


Стаж: 14 лет

Сообщений: 41
Благодарностей: 11
Полезность: 205

StSatan, пользуюсь уже почти год - претензий нет и все, что необходимо поддерживает. Сам удивился от хостинга. Было только несколько раз, что сайт не открывался да и то на час. Uptime 99.9 %.
Почитай отзывы о хостинге. Там много чего интересного пишут.
Лично на тарифе 0.99$ у меня сайт на Joomla, форум на phpbb3, сайт на DLE, быстрая загрузка файлов через http (для сервера CS 1.6), скрипт автоподъема и так по мелочи.

Отредактировал: eagle-ru, - 26.4.2011, 21:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя StSatan
сообщение 29.4.2011, 16:22
Сообщение #17
Стаж: 15 лет

Сообщений: 13
Благодарностей: 1
Полезность: 0

Вчера всё сделал - всё работает, скрипт сервер поднимает, и больше не перезагружает(порты открыли). Спасибо большое eagle-ru, без этого скрипта геморой был=) хоть сервер собрал и не падающий, но всёже раз в месяц случайные падения были, и не сразу серв подымали - в общем бред. Спасибо за скрипт.

Ах да исправь на картике Avtorestart на Autorestart а то как-то...

Отредактировал: StSatan, - 29.4.2011, 18:38
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя eagle-ru
сообщение 1.5.2011, 22:42
Сообщение #18


Стаж: 14 лет

Сообщений: 41
Благодарностей: 11
Полезность: 205

StSatan, не за что :wink:
Ах да исправь на картике Avtorestart на Autorestart а то как-то... - пусть это будет фишкой =).
Сам хостинг не заинтересован в добавлении данной функции, хотя у остальных она уже стандартно входит в набор.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя -ZVER- Contra
сообщение 17.5.2011, 18:24
Сообщение #19


Стаж: 14 лет

Сообщений: 168
Благодарностей: 17
Полезность: < 0

а для serva4ok.ru сможешь такое сделать ??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя djdredd
сообщение 17.5.2011, 21:08
Сообщение #20


Стаж: 13 лет

Сообщений: 136
Благодарностей: 36
Полезность: 211

Цитата(-ZVER- Contra @ 17.5.2011, 19:24) *
а для serva4ok.ru сможешь такое сделать ??

Там и так есть автоподъем
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: