Сабж: Сервер стоит на 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
Хотя мб и не в нем дело, подскажите люди добрые почему может идти сдвиг и как с этим бороться.