Смена порта у сервера после краша

Обсуждаем все, что относится к выделенным серверам *NIX (Unix, Linux) и Windows
Ответить
Сообщение
Автор
XuTPoTa
Нович0к
Нович0к
Сообщения: 3
Зарегистрирован: 17.01.2012

#1 Сообщение 17.01.2012, 07:44

Сабж: Сервер стоит на FreeBSD, написаны скрипты на автозапуск, автоподьем и т.п, и все вроде бы работает, но бывает что после смены мапы сервер оказывается на другом порту: конкретно, был 78.140.22.14:7907:7908 , становится 78.140.22.14:7908:7908 или 78.140.22.14:7909:7908, при этом карта вроде бы встает верная. Как ни странно порт для вебадминки не сдвигается, и можно зайти через неё и рестартнуть карту, и сервер вернется на свое место. Мне кажется виной всему неправильный скрипт автозапуска, так как явление со сдвигом портов распространяется и на сервера left4dead2 которые стоят на той же машине и используют практически идентичные скрипты.
Вот скрипт:
Скрытое содержимое
#!/bin/sh
#
### BEGIN INIT INFO
# Provides: srcds
# Required-Start: $syslog $local_fs $network
# Required-Stop: $syslog $local_fs $network
# Should-Start: $remote_fs $named
# Should-Stop: $remote_fs $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start srcds Server
# Description: srcds Start Script
#
#
#
### END INIT INFO
#
# Source function library.
#./lib/lsb/init-functions
#
#VERSION=1.0
#

#####################################################
# Конфигурирование
#####################################################

SERVER_NAME="TomServ" #Название сервера
screen_name=7907 #Название screen-сессии
path=/usr/server/kf/$screen_name #Путь до ROOT-директории сервера
path_update=/usr/server/srcds_l #Путь до HLDSUpdateTool
path_crack=/usr/server/source/RevEmu/ #Путь до eSTEAMATiON
srcds_ip=78.140.22.14 #IP сервера
srcds_port=$screen_name #Порт сервера
srcds_gametype=killingfloor #Тип игры
srcds_map=KF-BioticsLab.rom #Имя первоначальной карты при запуске
#checker_command="quakestat" #команда пакета qStat отвечающего за проверку сервера


start() {
# Проверка предстартовая
if [ -n "`ps -A | pgrep -fl $screen_name | grep -v grep | grep -vi start | grep -vi update | grep -vi restart`" ]; then
echo
echo
echo " Невозможно запустить сервер $SERVER_NAME, сервер уже запущен!"
echo
else
echo
echo
echo " Запуск сервера $SERVER_NAME"
cd $path/system
/usr/local/bin/screen -A -m -d -S $screen_name $path/system/ucc-bin server "$srcds_map?game=KFmod.KFGameType?Uzeds5.UZGameType?Mutator=Uzeds5.Uzeds,ServerPerksv5.ServerPerksMut,MutKillMessage.MutkillMessage,KFHardPat.KFHardPat,Autospawner.Autospawner,KFARGBuchonOPQ.KFARGBuchonOPQ,KFBruteMut.KFBruteMut,KFPatHPLeft.MutPatHPLeft,MutKFAntiBlocker.MutKFAntiBlokcer,HellFire.MutAddHellFire,MutAddShivers.MutAddShivers?AdminName=VETAL?AdminPassword=trololo ini=$screen_name.ini"

sleep 5
if [ -n "`ps -A | pgrep -fl $screen_name | grep -v grep | grep -vi start | grep -vi update | grep -vi restart`" ]; then
echo " Статус ~> Сервер запущен"
else
echo " Статус ~> Неудачно"
fi
echo
fi
}

stop() {
echo
echo
if [ -n "`ps -A | pgrep -fl $screen_name | grep -v grep | grep -vi stop | grep -vi update | grep -vi restart`" ]; then
# Извлекаем ID процесса и убиваем процесс
kill `ps -A | pgrep -fl "$screen_name" | grep -v grep | grep -vi stop | grep -vi update | grep -vi restart | grep bin | awk '{ print $1}'`
sleep 10
if [ -n "`ps -f | pgrep -fl $screen_name | grep -v grep | grep -vi stop | grep -vi update | grep -vi restart`" ]; then
echo " Статус ~> Неудачно, сервер запущен"
else
echo " Статус ~> Сервер выключен"
fi
else
echo "Невозможно остановить $SERVER_NAME, сервер не запущен!"
fi
echo
}

status() {
echo
echo
if [ -n "`ps -A | pgrep -fl $screen_name | grep -v grep | grep -v status`" ]; then
echo " Статус ~> Сервер On"
else
echo " Статус ~> Сервер Off"
fi
echo
}

console() {
echo
echo
if [ -n "`ps -A | pgrep -fl $screen_name | grep -v grep | grep -i screen`" ]; then
echo " Подключение к консоли $SERVER_NAME сервера"
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo " для выхода из консоли нажать Ctrl+A, затем D "
echo " для выключения сервера нажать Ctrl+D "
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
export TERM=linux
sleep 5
/usr/local/bin/screen -T $TERM -r `/usr/local/bin/screen -ls | grep $screen_name | awk '{ print $1}'`
else
echo " Сервер не запущен"
fi
}

update() {
echo
echo
echo " Обновляем $SERVER_NAME"
$path_update/steam -command update -game $srcds_gametype -verify_all -dir "$path"
sleep 3
echo " Обновление завершено"
echo " Ставим eSTEAMATiON"
mv $path/system/steamclient_linux.so $path/system/steamclient_valve.so
cp $path_crack/steamclient_linux.so $path/system/steamclient_linux.so
echo " eSTEAMATiON установлен"
sleep 1
echo " Обновление завершено"
echo
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 2
start
;;
status)
status
;;
console)
console
;;
update)
stop
sleep 2
update
sleep 2
start
;;
*)
echo "Usage: $0 {start|stop|restart|status|console|update}"
exit 1
esac
Хотя мб и не в нем дело, подскажите люди добрые почему может идти сдвиг и как с этим бороться.

Аватара пользователя
Jonny
Полковник
Полковник
Сообщения: 1371
Зарегистрирован: 30.05.2008
Благодарил (а): 23 раза
Поблагодарили: 54 раза

#2 Сообщение 17.01.2012, 10:13

Если при запуске сервер не может занять выделенный ему порт, то он занимает следующий свободный. Ставь паузу в скрипте перезапуска.
Никакого отношения к нацистским группам и направлениям не имею.

XuTPoTa
Нович0к
Нович0к
Сообщения: 3
Зарегистрирован: 17.01.2012

#3 Сообщение 17.01.2012, 12:14

Jonny писал(а):Если при запуске сервер не может занять выделенный ему порт, то он занимает следующий свободный. Ставь паузу в скрипте перезапуска.
Спс за ответ, но не мог ли бы вы указать что изменить конкретно, просто я мало соображаю в таких делах, но волей судьбы приходиться( (скрипт естественно писал не я)

Аватара пользователя
[echo]
Капитан
Капитан
Сообщения: 342
Зарегистрирован: 08.10.2011
Откуда: Чернигов
Контактная информация:

#4 Сообщение 17.01.2012, 14:01

если это происходит после смены карты, то скрипт тут ни причём.
карту меняете по идее командой map "имя карты", пробуйте менять карту командой changelevel(както так)
пс. серверами л4д не занимался, советы могут быть не правильные.
а вообще неплохо было бы если бы ты выложил лог при смене карты

XuTPoTa
Нович0к
Нович0к
Сообщения: 3
Зарегистрирован: 17.01.2012

#5 Сообщение 17.01.2012, 14:11

[echo] писал(а):если это происходит после смены карты, то скрипт тут ни причём.
карту меняете по идее командой map "имя карты", пробуйте менять карту командой changelevel(както так)
пс. серверами л4д не занимался, советы могут быть не правильные.
а вообще неплохо было бы если бы ты выложил лог при смене карты
Нет, я думаю сама смена карты тут не при чем, хотя да он и крашится во время смены, но по причине того что на серве стоят самописные мытаторы, плагины и т.п. Слава богу это происходит не часто. А проблема заключается в том что сервер не встает как надо, после краша, по скрипту, а плюсует себе ещё один порт и подымается на нем, думаю Jonny прав, что во время подъема нужный порт ещё занят и он подымает серв на новом (касается сервов left4dead1,2 и Killing floor). Подскажите, пожалуйста, как прописать эту паузу, перед тем как серв снова начнет подыматься.

Ответить