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

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

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

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

Hlds на Freebsd 7.0 падает, и не может перезапуститься.

, FATAL ERROR (shutting down): Couldn't allocate dedicated server IP
Статус пользователя METAJIJI
сообщение 9.6.2009, 18:12
Сообщение #1
Стаж: 17 лет

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

Столкнулся с такой проблемой, сервер падает и не может запуститься по новой, ругается на порт, говорит что он занят о.О, хотя сервер лежит намертво, в логах вот это:
Код
Console initialized.
Protocol version 48
Exe version 1.1.2.6/Stdio (cstrike)
Exe build: 18:05:13 Oct 24 2008 (4383)
STEAM Auth Server
couldn't exec language.cfg
WARNING: UDP_OpenSocket: port: 27015  bind: Address already in use
FATAL ERROR (shutting down): Couldn't allocate dedicated server IP port 27015.

warning: A handler for the OS ABI "GNU/Linux" is not built into this configuration
of GDB.  Attempting to continue with the default i386 settings.

email debug.log to linux@valvesoftware.com
вторник,  9 июня 2009 г. 23:31:38 (KRAST): Server restart in 10 seconds


строка запуска:
Код
/usr/local/bin/screen -dm -S cs_1.6_cl ./hlds_run -binary ./hlds_i686 -game cstrike -console -insecure -nomaster -pingboost 1 -debug -notrap +map de_dust2 +maxplayers 32 +sv_lan 1 +port 27015



после запуска в логах все чисто, ошибок нет, кроме вот этих двух:

Код
..........................................................................
[S_API FAIL] SteamAPI_Init() failed; unable to update local steamclient. Continuing with current version anyway.
..........................................................................
cminterface.cpp (599) : Assertion Failed: NULL != m_hConnection

Пробовал гуглить, ничего интересного не нашел об этом....


Сервер собирал сам, при помощи утилиты hlupdatetool, добавил плагин для 48\47 протокола, античит RHLG+HLGuard.
meta list
Код
Currently loaded plugins:
      description      stat pend  file              vers      src  load  unlod
[ 1] dproto           RUN   -    dproto_i386.so    v0.2.5    ini  Start Never
[ 2] AMXX [Reallite]  RUN   -    amxmodx_mm_i386.  v1.8.1.3  ini  Start ANY
[ 3] HLGuard          RUN   -    hlguard_mm_night  v1.9.n10  ini  Chlvl Chlvl
[ 4] FakeMeta         RUN   -    fakemeta_amxx_i3  v1.8.1.3  pl2  ANY   ANY
[ 5] Engine           RUN   -    engine_amxx_i386  v1.8.1.3  pl2  ANY   ANY
[ 6] CSX              RUN   -    csx_amxx_i386.so  v1.8.1.3  pl2  ANY   ANY
[ 7] CStrike          RUN   -    cstrike_amxx_i38  v1.8.1.3  pl2  ANY   ANY
[ 8] Fun              RUN   -    fun_amxx_i386.so  v1.8.1.3  pl2  ANY   ANY


Так же обновил эмулятор Linux'a
Код
/compat/linux/bin/uname -r
2.6.19


P.S. извините за длинный пост :)

Отредактировал: METAJIJI, - 9.6.2009, 21:31
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя METAJIJI
сообщение 9.6.2009, 22:50
Сообщение #2
Стаж: 17 лет

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

Кажется дошло в чем была моя ошибка.... IP был вписан в 'server.cfg', а при падении сервер, не мог понять где ему запускаться, вот и не стартовал... Хотя при первом запуске, до падения, сервер честно считывал из конфига опцию 'ip'.

сейчас сделал вот так:
Код
/usr/local/bin/screen -dm -S cs_1.6_cl ./hlds_run -binary ./hlds_i686 -game cstrike -console -insecure -nomaster -pingboost 2 -debug -notrap +map de_dust2 +maxplayers 32 +sv_lan 1 +ip localhost +port 27015


таким образом сервер доступен для любой подсети, в которую он включен. Да у меня на сетевушке несколько альясов висит для 3 подсетей.


Ошибки
Код
..........................................................................
[S_API FAIL] SteamAPI_Init() failed; unable to update local steamclient. Continuing with current version anyway.
..........................................................................
cminterface.cpp (599) : Assertion Failed: NULL != m_hConnection

так и не удалось победить... Может есть у кого идеи по этому поводу?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя tokezo
сообщение 12.6.2009, 13:28
Сообщение #3


Стаж: 16 лет

Сообщений: 57
Благодарностей: 9
Полезность: 124

killall hlds_run
killall hlds_i486
killall hlds_i686
killall hlds_amd
clapping.gif

Отредактировал: tokezo, - 12.6.2009, 13:30
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя noobas
сообщение 14.6.2009, 1:18
Сообщение #4
Стаж: 18 лет

Сообщений: 126
Благодарностей: 12
Полезность: 82

вот такой вот скриптик запуска попробуй
Код
srv1_name=localhost
srv1_fname="localhost"
srv1_dirpath="/home/noobas/hlds"
srv1_script=hlds_run
srv1_ip=127.0.0.1
srv1_port=27015
srv1_gametype=cstrike
srv1_players=24
srv1_map=de_dust2
srv1_svlan=1
srv1_pid=cspub.pid
srv1_heapsize=256000
srv1_opts="-nomaster -insecure -pingboost 2"

#####################################################
# don't tuch anything below this line!
#####################################################

#srv1_chk=`screen -ls | grep $srv1_name`
#srv1_chk=localhost
function srv1_started() {
if [ -z $srv1_chk ]; then
return 1
else
return 0
fi
}

function srv1_stop() {
srv1_started
if [ $? -eq 1 ]; then
return 1
fi
/usr/bin/screen -S $srv1_name -X quit >/dev/null 2>&1
return 0
}

function srv1_start() {
srv1_started
if [ $? -eq 0 ]; then
return 1
fi
cd $srv1_dirpath && screen -AmdS $srv1_name ./$srv1_script -game $srv1_gametype +maxplayers $srv1_players +map $srv1_map +port $srv1_port -heapsize $srv1_heapsize +sv_lan $srv1_svlan $srv1_opts -pidfile $srv1_pid
return 0
}

function srv1_echo() {
echo -n $2
$1
if [ $? -eq 0 ]; then
echo -e "\t\t[ OK ]"
else
echo -e "\t\t[FAIL]"
fi
return 0
}

case $1 in
start)
srv1_echo srv1_start "STARTING $srv1_fname: `basename $0` start"
;;
stop)
srv1_echo srv1_stop "STOPING $srv1_fname: `basename $0` stop"
;;
restart)
srv1_echo srv1_stop "STOPING $srv1_fname: `basename $0` stop"
srv1_echo srv1_start "STARTING $srv1_fname: `basename $0` start"
;;
*)
echo "Use Commands: `basename $0` start|stop|restart"
;;
esac

подкорректируй под себя немножко настройки ествественно)))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Paster
сообщение 18.6.2009, 8:07
Сообщение #5


Стаж: 19 лет

Сообщений: 491
Благодарностей: 64
Полезность: 139

Код
/usr/local/bin/screen -dm -S cs_1.6_cl ./hlds_run -binary ./hlds_i686 -game cstrike -console -insecure -nomaster -pingboost 2 -debug -notrap +map de_dust2 +maxplayers 32 +sv_lan 1 +ip localhost +port 27015


При +ip localhost +port 27015 не отражается на веб мониторинге. Может есть другие способы настроить рестарт при падении???
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Paster
сообщение 21.6.2009, 20:19
Сообщение #6


Стаж: 19 лет

Сообщений: 491
Благодарностей: 64
Полезность: 139


При падении сервера идет попытка рестарта, но в htop заметил что под одним портом несколько PID процессов запуска hlds_run.
Так вот, после падения не все падают процессы под конкретным портом, соответственно новый не может стартовать, мол порт занят и опять рестарт, идет цикл.

Может у кого есть идеи, как делать так что отпадали все процессы конкретного порта, чтоб дать возможность рестарту сервера?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Redacid
сообщение 22.6.2009, 19:44
Сообщение #7


Стаж: 19 лет

Сообщений: 72
Благодарностей: 26
Полезность: 280

У меня сделано через nagios, он проверяет отвечает ли сервер на порту, делает несколько попыток и если ответа нет - то запускает скрипт перезапуска. Работает как часы
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя bohdan4ik
сообщение 22.6.2009, 23:47
Сообщение #8
Стаж: 16 лет

Сообщений: 21
Благодарностей: 2
Полезность: 73

Цитата(Redacid @ 22.6.2009, 20:44) *
У меня сделано через nagios

Хмм... Спасибо, что напомнил об этом)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Redacid
сообщение 24.6.2009, 6:45
Сообщение #9


Стаж: 19 лет

Сообщений: 72
Благодарностей: 26
Полезность: 280

Цитата(bohdan4ik @ 23.6.2009, 0:47) *
Хмм... Спасибо, что напомнил об этом)


чуть поправлюсь)
Нагиос будет запускать скрипт перезапуска постоянно, поэтому в скрипте нужно сделать проверку на параметры которые он передаёт
OK WARNING CRITICAL
и на какую попытку реагировать 1,2,3,4(по умолчанию их 4, но это настраиваемо)
Не следует делать реакцию на первую попытку, потому как в момент смены карты сервер не отвечает на порту, бывают совпадения

Скрипт выглядит примерно так
Код
#!/bin/sh
clear

cs_path="/usr/local/hlds_gameon" #Путь к папке с сервером
my_uid="`id -u`" #id пользователя от которого запущен скрипт(в скрипте не используется,просто для информации)
my_name="`whoami`" #Имя пользователя от которого запущен скрипт
cs_port="27015" #Порт сервера КС
scr_name="g1hlds" #Имя сессии для screen сервера КС
cs_max_players="22" #Максимальное число игроков для сервера КС
cs_startmap="de_nuke" #С какой карты стартовать сервер
cs_server_name="Counter Strike Redacid Classic" #Имя сервера(используется только в скрипте для наглядности)
cd ${cs_path}


if (test "$1" = "OK")  then
        exit 0
fi

if (test "$2" = "3")  then
if (test "$1" = "CRITICAL")  then
        echo ===================================================================
        printf "\033[32m Перезапуск сервера ${cs_server_name} \033[0m\n"
        echo ===================================================================
        sleep 1
        go_pids="`ps ax -U ${my_name} | grep -v 'ps' | grep -v restart | grep -v sshd | grep -v 'PID' | awk '{printf ( "%s ", $1 ) }'`"
        echo -------------------------------------------------------------------
        printf "\033[32m PIDы процессов: ${go_pids} \033[0m\n"
        echo -------------------------------------------------------------------
        printf "\033[32m Список процессов: \033[0m\n"
        ps ax -U ${my_name}
        echo -------------------------------------------------------------------
        sleep 2

        kill ${go_pids}
        printf "\033[32m Процессы ${go_pids} убиты \033[0m\n"

        printf "\033[32m Запускаем сервер \033[0m\n"
        screen -d -m -S ${scr_name} ${cs_path}/hlds_run -game cstrike +sv_lan 1 +maxplayers ${cs_max_players} +port ${cs_port} -nomaster -insecure +rcon_passw

        echo ===================================================================
        printf "\033[32m Сервер КС перезапущен \033[0m\n"
        echo ===================================================================
        sleep 2
        printf "\033[32m Список процессов \033[0m\n"
        ps ax -U ${my_name}
        echo -------------------------------------------------------------------
exit 0
fi
fi



NAGIOS

/usr/local/etc/nagios/objects/commands.cfg
Код
define command{
        command_name    restart-classic
        command_line    sudo -u gameon /usr/local/hlds_gameon/restart.sh $SERVICESTATE$ $SERVICEATTEMPT$
        }


/usr/local/etc/nagios/objects/localhost.cfg
Код
define service{
        use                             local-service    
        host_name                       redacid.org.ua
        service_description             CS Classic
        check_command                   check_game!hla2s!193.151.254.142:27015
        max_check_attempts              4
        event_handler                   restart-classic
        }


Также нужно настроить sudo, что-бы пользователь nagios мог запускать скрипты от имени пользователя от которого работает сервер КС в моём случае это gameon
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя bohdan4ik
сообщение 25.6.2009, 0:22
Сообщение #10
Стаж: 16 лет

Сообщений: 21
Благодарностей: 2
Полезность: 73

Код
./hlds_run -pidfile hlds.pid -timeout 0

Кстати, а так никто не пробовал, а? О_о...

Отредактировал: bohdan4ik, - 25.6.2009, 0:23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Paster
сообщение 25.6.2009, 9:34
Сообщение #11


Стаж: 19 лет

Сообщений: 491
Благодарностей: 64
Полезность: 139

Цитата(bohdan4ik @ 25.6.2009, 1:22) *
Код
./hlds_run -pidfile hlds.pid -timeout 0

Кстати, а так никто не пробовал, а? О_о...

Что это дает?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bohdan4ik
сообщение 25.6.2009, 12:17
Сообщение #12
Стаж: 16 лет

Сообщений: 21
Благодарностей: 2
Полезность: 73

Цитата(Paster @ 25.6.2009, 10:34) *
Что это дает?

То же самое, что и вышеперечисленные скрипты... hlds_run'у нужно знать pid процесса hlds_arch, дабы нормально перезапустится. -timeout указан, дабы рестарт происходил мгновенно, не ожидая 10-ти секунд (по-умолчанию).
З.Ы.: hlds_run будет убивать именно упавший сервер
З.З.Ы.: Курим маны (ака hlds_run -help)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fortran
сообщение 3.11.2009, 20:44
Сообщение #13


Стаж: 16 лет

Сообщений: 455
Благодарностей: 107
Полезность: 485

кто шарит как в нагиос check_game прилепить, он идёт в екстра плагинах.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Zac Efron
сообщение 28.2.2011, 21:31
Сообщение #14
Стаж: 15 лет

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

METAJIJI,
Решил проблему?? Не подскажешь как?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя nardamon
сообщение 7.4.2011, 19:32
Сообщение #15
Стаж: 15 лет

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

-norestart в строку запуска.
Почему падает смотреть логи


!
Аккаунт пользователя заблокирован до: 12.8.2286, 9:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя WHAT-CAN-BE-BETTER-THEN-SEX
сообщение 20.9.2013, 19:51
Сообщение #16
Стаж: 18 лет

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

В hlds_run посли:
Код
#loop forever
while true
do
        # Update if needed
        update


добавляем строку:
Код
sockstat -4l | grep 27015 | awk '{print $3}' | sort | uniq | xargs kill

27015 - порт сервера
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 22.9.2013, 0:17
Сообщение #17


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

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