Обсуждаем все, что относится к выделенным серверам *NIX (Unix, Linux) и Windows
-
bigbrain911
- Майор
- Сообщения: 618
- Зарегистрирован: 22.03.2010
- Откуда: http://zloy.pl.ua/
- Поблагодарили: 11 раз
-
Контактная информация:
#16
Сообщение
07.09.2011, 22:05
Попробовал запустить скрипт без добавления в крон, сервер не стартует, вот что получается::
[>>] Проверка размера .log файлов
Файл checker.log отсутствует
Файл qconsole.log отсутствует
[>>] Запуск сервера test
Порт севрера: 27020
Привязка к ядру: 0
Запуск от юзера: hlds
Статус: root@game-server:/home/hlds#
запускал командой /etc/init.d/run_cssserver start от рута, в скрипте указан простой юзер, да и как по мне скрипт очень не удобный, писать длинные команды, если можно просто собрать ссылками в одном месте все простые скрипты запуска и стартовать через mc, но это мое мнение.
Есть ли простой скрипт перезапуска при краше? Мне чекеры не нужны (из 16 серверов за 3 дня завис только один), все сервера будут стартовать запуском одного скрипта, который позже добавлю в крон, нужно реализовать простейший перезапуск в случае краша, типо как было на винде:
@echo off
cls
:loop
start /wait e:\test\orangebox\srcds.exe -console -game cstrike -tickrate 66 +fps_max 0 +maxplayers 32 -port 27020 +map de_dust2 +tv_port 27060
echo (%time%) WARNING: srcds closed or crashed, restarting....
goto loop
для линухи сейчас так:
#!/bin/sh
echo "Starting CS:Source test"
sleep 1
screen -A -m -d -S test ./srcds_run -game cstrike -console +ip 0.0.0.0 -tickrate 66 +fps_max 0 +maxplayers 32 -port 27020 +tv_port 27060 +map de_dust2 +sv_lan 0
Подскажите как сделать?
-
net-master
- Капитан
- Сообщения: 446
- Зарегистрирован: 07.11.2009
- Поблагодарили: 1 раз
#17
Сообщение
08.09.2011, 21:34
Скрипт под Freebsd
Код: Выделить всё
#!/bin/sh
SERVER_NAME="Имя сервера"
screen_name=public
path="?server/dedicated/orangebox"
srcds_ip=127.0.0.1
srcds_port=27015
srcds_gametype=cstrike
srcds_players=30
srcds_map=de_dust2
srcds_pid=$screen_name.pid
srcds_restart=-norestart
screen_pid=$screen_name-screen.pid
srcds_options="+exec server.cfg"
use_user=имя пользователя
condebug=0
check_version=0
checker_command="qstat"
RETVAL=0
succes="[\033[1;32m OK \033[0m]"
failed="[\033[1;31m FAILED \033[0m]"
status_on="[\033[1;32m ONLINE \033[0m]"
status_off="[\033[1;31m OFFLINE \033[0m]"
title="\033[1;32m [Info]\033[0m"
if [ $condebug = 1 ]; then
srcds_options2="-condebug"
fi
# Процесс screen
INTR="screen -A -m -d -S $screen_name"
if [ ! -x $path/srcds_run ]; then
printf "\033[22;31m Проверьте права на исполнение srcds_run \033[0m\n"
exit 1
fi
prestart_check() {
if [ -f $path/$srcds_pid ] && [ -f $path/$screen_pid ]; then
ch='ps auxwww | grep $screen_name | grep scre'
if [ -n "$ch" ]; then
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "\033[1;34m Server $SERVER_NAME\033[0m \033[32m уже [ONLINE]\033[0m\n"
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
exit 1
else
cd $path
rm -rf $path/$screen_pid
rm -rf $path/$srcds_pid
fi
fi
}
###################################################################################### Старт сервера ########################################################################################################
start() {
if [ $check_version = 1 ]; then
check_version
fi
# Проверка предстартовая
#prestart_check
printf "$title\033[1;34m Запуск Статистики сервера \033[0m\n"
cd $path
$INTR ./srcds_run -game $srcds_gametype -master $srcds_restart +maxplayers $srcds_players +map $srcds_map +ip $srcds_ip +port $srcds_port $srcds_options +log on -pidfile $path/$srcds_pid
# Поиск и запись пидов процессов сервера и скринв системе
ps auxwww | grep $screen_name | grep $srcds_port | grep scre | awk '{ print $2}' > $path/$screen_pid
printf "$title\033[1;34m Запуск сервера $SERVER_NAME \033[0m\n"
printf "\033[1;35m IP адрес:\033[0m \033[1;36m$srcds_ip\033[0m\n"
printf "\033[1;35m Карта:\033[0m \033[1;36m$srcds_map\033[0m\n"
printf "\033[1;35m UDP порт:\033[0m \033[1;36m$srcds_port\033[0m\n"
printf "\033[1;35m Колличество игроков:\033[0m \033[1;36m$srcds_players\033[0m\n"
printf "\033[1;35m Дополнительные опции:\033[0m \033[1;36m$srcds_options\033[0m\n"
printf "\033[1;35m Тип игры:\033[0m \033[1;36m$srcds_gametype\033[0m\n"
printf "\033[1;35m Запуск от пользователя:\033[0m \033[1;36m$use_user\033[0m\n"
printf "\033[1;33m Статус => \033[0m"
sleep 1
if [ -f $path/$srcds_pid ] && [ -f $path/$screen_pid ]; then
ch=`ps auxwww | grep $screen_name | grep scre`
if [ -n "$ch" ]; then
printf "%53s$succes \n"
else
printf "%53s$failed \n"
fi
fi
}
########################################################### Stop server #####################################################################################
stop() {
if [ $check_version = 1 ]; then
check_version
fi
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ -f $path/$srcds_pid ] && [ -f $path/$screen_pid ]; then
# Извлекаем ID процесса из файла и увибаем процессы
# Завершаем КОРРЕКТНО сервер!!
screen -R $screen_name -p 0 -X register . quit
screen -R $screen_name -p 0 -X paste .
screen -R $screen_name -p 0 -X stuff $'\n'
screen -R $screen_name -X quit > /dev/null
kill `cat $path/$srcds_pid`
kill `cat $path/$screen_pid`
sleep 1
rm -rf $path/$screen_pid
rm -rf $path/$srcds_pid
printf "$title\033[1;31m Остановка $SERVER_NAME \033[0m"
printf "%33s$succes \n"
else
printf "\033[1;34m Невозможно остановить $SERVER_NAME, сервер [OFFLINE] \033[0m"
printf "%5s$failed \n"
fi
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
###################################################### Статус сервера ###############################################################################################
status() {
if [ $check_version = 1 ]; then
check_version
fi
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "$title\033[1;34m Статус сервера $SERVER_NAME \033[0m\n"
printf "\033[1;35m IP Сервера:\033[0m \033[1;36m$srcds_ip\033[0m\n"
printf "\033[1;35m Карта сервера:\033[0m \033[1;36m$srcds_map\033[0m\n"
printf "\033[1;35m UDP порт:\033[0m \033[1;36m$srcds_port\033[0m\n"
printf "\033[1;35m Колличество игроков:\033[0m \033[1;36m$srcds_players\033[0m\n"
printf "\033[1;35m Дополнительные опции:\033[0m \033[1;36m$srcds_options\033[0m\n"
printf "\033[1;35m Тип игры:\033[0m \033[1;36m$srcds_gametype\033[0m\n"
printf "\033[1;35m Запуск от пользователя:\033[0m \033[1;36m$use_user\033[0m\n"
printf "\033[1;33m Статус => \033[0m"
sleep 1
ch=`ps auxwww | grep $screen_name | grep scre`
if [ -n "$ch" ]; then
printf "%49s$status_on \n"
else
printf "%48s$status_off \n"
fi
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
console() {
if [ $check_version = 1 ]; then
check_version
fi
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ -f $path/$srcds_pid ] && [ -f $path/$screen_pid ]; then
printf "$title\033[1;34m Подключение к консоли $SERVER_NAME сервера \033[0m\n"
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "\033[36m Для выхода из консоли поочерёдно нажать \033[1;36mCtrl+A, D \033[0m\n"
printf "\033[36m Для листинга консоли поочерёдно нажать \033[1;36mCtrl+A, Esc \033[0m\n"
printf "\033[36m Для выхода из режима листинга нажать \033[1;36mEsc \033[0m\n"
printf "\033[1;31m Внимание!!! По неаккуратности можно положить сервер :D \033[0m\n"
echo " Консоль включится через 5 секунд..."
sleep 5
screen -R $screen_name
else
printf "\033[1;31m Невозможно подключиться к $SERVER_NAME, сервер [OFLINE] \033[0m\n"
fi
}
compile() {
if [ $check_version = 1 ]; then
check_version
fi
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ -d $path/cstrike/addons/sourcemod/scripting ]; then
printf "\033[32m Компиляция плагинов sourcemod \033[0m\n"
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "\033[36m Компилируются исходные файлы (smx), находящиеся в директории {addons/sourcemod/scripting/compiled/*.smx} \033[0m\n"
printf "\033[36m По завершению компиляции нажмите Q для выхода \033[0m\n"
printf "\033[36m Компиляция начнется через 2 секунды. \033[0m\n"
sleep 2
cd $path/cstrike/addons/sourcemod/scripting/
sh compile.sh
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "\033[32m Плагины скомпилированы \033[0m\n"
else
printf "\033[22;31m Проверьте установлен ли Sourcemod (??) \033[0m\n"
fi
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
check_version() {
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cd $path
rm -f version.txt
wget http://eqline.ru/project/srcds_init_script/version.txt 1> /dev/null 2>&1
sleep 1
for ver in `cat $path/version.txt`
do
if [ $VERSION \< $ver ]; then
printf "\033[1;31m Доступна новая версия скрипта ( $ver )\033[0m\n"
printf "\033[36m Подробнее на форуме eQline.ru: http://forum.eqline.ru \033[0m\n"
printf "\033[1;36m Ссылка: http://forum.eqline.ru/topic/361-скрипт-запуска-srcds-серверов/ \033[0m\n"
else
printf "\033[1;36m Ваша версия является последней\033[0m \033[1;34m( Текущая версия: $VERSION ) \033[0m\n"
fi
break
done
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rm -f version.txt
sleep 1
}
check_logsize() {
printf "$title\033[1;34m Проверка размера .log файлов \033[0m\n"
maxlogsize=10485760
if [ -f $path/checker.log ]; then
sizeCheckUP=`stat -c%s $path/checker.log`
printf "\t\033[1;36m Размер checker.log:\033[0m \033[1;35m $sizeCheckUP байт\033[0m\n"
if [ "$sizeCheckUP" -ge "$maxlogsize" ]; then
printf "\t\033[1;31m Очищаю файл checker.log\033[0m\n"
tail -n 50 $path/checker.log > $path/checker.temp
mv $path/checker.temp $path/checker.log
sleep 1
fi
else
printf "\t\033[1;31m Файл checker.log отсутствует\033[0m\n"
fi
if [ -f $path/cstrike/qconsole.log ]; then
sizeQconsole=`stat -c%s $path/cstrike/qconsole.log`
printf "\t\033[1;36m Размер qconsole.log:\033[0m \033[1;35m $sizeQconsole байт\033[0m\n"
if [ "$sizeQconsole" -ge "$maxlogsize" ]; then
printf "\033[1;31m Очищаю файл qconsole.log\033[0m\n"
tail -n 50 $path/cstrike/qconsole.log > $path/cstrike/qconsole.temp
mv $path/cstrike/qconsole.temp $path/cstrike/qconsole.log
sleep 1
fi
else
printf "\t\033[1;31m Файл qconsole.log отсутствует\033[0m\n"
fi
}
checker() {
checktag="[HLDS-CheckUP]"
checkresponse=`$checker_command -P -a2s $srcds_ip:$srcds_port | grep response`
if [ -n "$checkresponse" ]; then
printf "\033[1;37m$checktag\033[0m $SERVER_NAME \033[31m*[No response]*\033[0m\n"
# echo Отсылаем почту
cd $path
time=`date +%X`
date=`date +%D`
inlog=`$checker_command -P -a2s $srcds_ip:$srcds_port | grep response`
printf "[$time - $date] *[No response]* $inlog\n" >> checker.log
stop
sleep 2
start
sleep 1
echo ----------------ATTANTION---------------- >> checker.log
printf "StartUP $SERVER_NAME:" >> checker.log
ch=`ps -ef | grep SCREEN | grep $screen_name`
if [ -n "$ch" ]; then
printf " *[OK]* \n" >> checker.log
else
printf " *[FAILED]* \n" >> checker.log
fi
echo ----------------------------------------- >> checker.log
exit 1
fi
checkdown=`$checker_command -P -a2s $srcds_ip:$srcds_port | grep DOWN`
if [ -n "$checkdown" ]; then
printf "\033[1;37m$checktag\033[0m $SERVER_NAME \033[31m*[DOWN]*\033[0m\n"
# echo Отсылаем почту
cd $path
time=`date +%X`
date=`date +%D`
inlog=`$checker_command -P -a2s $srcds_ip:$srcds_port | grep DOWN`
printf "[$time - $date] *[DOWN]* $inlog\n" >> checker.log
stop
sleep 2
start
sleep 1
echo ----------------ATTANTION---------------- >> checker.log
printf "StartUP $SERVER_NAME:" >> checker.log
ch=`ps -ef | grep SCREEN | grep $screen_name`
if [ -n "$ch" ]; then
printf " *[OK]* \n" >> checker.log
else
printf " *[FAILED]* \n" >> checker.log
fi
echo ----------------------------------------- >> checker.log
exit 1
fi
checkup=`$checker_command -P -a2s $srcds_ip:$srcds_port | grep cstrike`
if [ -n "$checkup" ]; then
printf "\033[1;37m$checktag\033[0m $SERVER_NAME \033[32m*[OK]*\033[0m\n"
cd $path
time=`date +%X`
date=`date +%D`
inlog=`quakestat -P -a2s $srcds_ip:$srcds_port | grep cstrike`
printf "[$time - $date] *[OK]* $inlog\n" >> checker.log
exit 1
fi
}
prerestart() {
if [ -f $path/$srcds_pid ] && [ -f $path/$screen_pid ]; then
printf "$title\033[1;31m Начинается отчет до рестарта $SERVER_NAME \033[0m\n\t"
cnt=$restarttime
while [ $cnt -gt 0 ]; do
screen -R $screen_name -p 0 -X register . "say Server has been restart after $cnt seconds!"
screen -R $screen_name -p 0 -X paste .
screen -R $screen_name -p 0 -X stuff $'\n'
echo -en "\r\t Рестарт через $cnt сек"
let cnt=cnt-1
sleep 1
done
screen -R $screen_name -p 0 -X register . "say ============================================="
screen -R $screen_name -p 0 -X paste .
screen -R $screen_name -p 0 -X stuff $'\n'
screen -R $screen_name -p 0 -X register . "say [ SERVER SHUTTING DOWN ]"
screen -R $screen_name -p 0 -X paste .
screen -R $screen_name -p 0 -X stuff $'\n'
screen -R $screen_name -p 0 -X register . "say ============================================="
screen -R $screen_name -p 0 -X paste .
screen -R $screen_name -p 0 -X stuff $'\n'
printf "$succes\n"
fi
}
case "$1" in
start)
check_logsize
start
;;
stop)
stop
;;
restart)
prerestart
sleep 2
stop
sleep 2
start
;;
status)
status
;;
console)
console
;;
update)
check_version
;;
checker)
checker
;;
logsize)
check_logsize
;;
*)
echo "Usage: $0 {start|stop|restart|status|console|update|checker|logsize}"
exit 1
esac
exit 0
Допливать нужно но в принципе работает.
-
net-master
- Капитан
- Сообщения: 446
- Зарегистрирован: 07.11.2009
- Поблагодарили: 1 раз
#19
Сообщение
09.09.2011, 13:41
Код: Выделить всё
#!/bin/sh
echo "Starting CS:Source test"
sleep 1
screen -A -m -d -S test ./srcds_run -game cstrike -console +ip 0.0.0.0 -tickrate 66 +fps_max 0 +maxplayers 32 -port 27020 +tv_port 27060 +map de_dust2 +sv_lan 0
Куда уж проще ?)
-
Rassol2
- Сержант
- Сообщения: 43
- Зарегистрирован: 16.02.2011
#21
Сообщение
11.09.2011, 22:19
Уважаемый bigbrain911
а как вы хотите что ваш сервер при краше подымался без этого чудесного и сложного скрипта.
Нужно что бы чекер обрашялся к серверу и ему был ответ.
1-сервер работает (ничего не делать)
2-сервер отключен (запустить)
3-Процес спит/заморожен (особый случай, либо не трогать либо убить процесс и поднять заново. Это условие описано в скрипте запуска товарища LeXiKoN )
а без чеков тут никак.
Последний раз редактировалось
Rassol2 11.09.2011, 22:22, всего редактировалось 2 раза.
-
bigbrain911
- Майор
- Сообщения: 618
- Зарегистрирован: 22.03.2010
- Откуда: http://zloy.pl.ua/
- Поблагодарили: 11 раз
-
Контактная информация:
#22
Сообщение
12.09.2011, 01:34
А как же он автоматически перезапускается, правда 1 раз. при стандартном запуске в скрине? Я думаю должен быть выход проще, сервер упал, процесс завершился - перезапуск и все это должно происходить в пределах скрина., может я много хочу или ошибаюсь.