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

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

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

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

14 страниц V   1 2 ... 12 13 »

Удобный скрипт запуска сервера кс :)

Статус пользователя 330863
сообщение 20.11.2010, 13:07
Сообщение #1


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

Наткнулься ранее на один хорошый скрипт запуска сервера кс на линух ,и решил добавить пару фич в нём.
Изменения
Цитата
- Оптимизация всего скрипта
* Улучшен алгоритм проверки серверов которые умерли (работает в 2 раза быстрее)
* Подключение к консоли улучшено
* Сделано нормальное отключение сервера (quit)
+ Добавлена проверка приоритета сервера и его востановление в случий если сервер крэшнулся и приоритет выставился по дефольту 0 (важно!)
+ Написал простую инструкцию установки :)


Как юзать ?:
ИМЯ_СКРИПТА start - запуск сервера
ИМЯ_СКРИПТА stop - остановка сервера
ИМЯ_СКРИПТА restart - перезапуск сервера
ИМЯ_СКРИПТА console - открыть консоли сервера
ИМЯ_СКРИПТА status - проверка статуса сервака с выводом статы в консоли
ИМЯ_СКРИПТА checker - команда полезная для выполнения через крон ,выполняет проверку сервера на предмет онлайна ,если серв будет в оффе или не отвечать скрипт его перезапустит :) также возврашает старый приоритет)

Что нужно чтобы скрипт работал ?
screen
taskset
renice
ну и сам сервер pardon.gif

Автор: Puma aka 330863

Скачать: Прикрепленный файл  Скрипт_для_запуска_HLDS_сервера_v1.2.zip ( 218,05 килобайт ) Кол-во скачиваний: 2440


ps.gif Думаю больше обновлений небудет, тк идей нету crazy.gif
ps.gif ps.gif Минута прошла а баг маленький нашёл blush2.gif

Отредактировал: 330863, - 11.7.2011, 9:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 28 раз
   Цитировать сообщение
Статус пользователя bravo
сообщение 20.11.2010, 17:40
Сообщение #2


Стаж: 17 лет

Сообщений: 2650
Благодарностей: 865
Полезность: 879

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

перетащил. молодец что не пожадничал
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 20.11.2010, 19:53
Сообщение #3


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

bravo,
ну я ранее писал что вылажу сие своё творение :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ser_UFL
сообщение 20.11.2010, 20:33
Сообщение #4


Стаж: 17 лет

Сообщений: 1632
Благодарностей: 637
Полезность: 819

Цитата
#IP сервера ,не ставить 0.0.0.0 !!!

Почему?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 20.11.2010, 21:32
Сообщение #5


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

Ser_UFL,
хмм ,поставить та можно ,но если поставить 0.0.0.0 то уже небудет работать server_pub checker ,тк там проверка выполняеться с помошью quakestat -a2s 0.0.0.0:ПОРТ ,выставив 0.0.0.0 quakestat небудет понимать что проверять ,и скрипт тупо перезапустит сервак yy.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя jeka2009
сообщение 23.11.2010, 16:43
Сообщение #6


Стаж: 13 лет
Город: москва

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

Спасибо.Будем пользоваться yahoo.gif :biggrin: clapping.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 27.11.2010, 11:39
Сообщение #7


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

UPD:

- Поправлен чекер ,если были значения usecore и allcore идентичны ,в логе писалься что мол плохой приоритет :biggrin:

код скрипта
#!/bin/bash
#
# авторы: LeXiKoN & Puma http://eqline.ru & http://cs-2x2.ru
# версия: 1.08
# Описание данной версий:
# - пофиксены баги
# - добавлено выставление правил 777 на файлы сервера после его запуска
# - добавлено запуск сервера с привязкой к определённому ядру с определённым приоритетом
# - добавлена проверка главных бинарных файлов
# - поправлено проверка привязки к ядру
# Source function library.
#. /lib/lsb/init-functions

VERSION="1.08"

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

server_name="Public Server" #Название сервера
screen_name="public" #Название screen-сессии
use_user="puma" #Имя юзера от которого запускается сервер
path="/media/Servers/hlds_pub" #Путь до ROOT-директории сервера (без /в конце)
hlds_binary='hlds_i686'
hlds_ip="95.65.64.90" #IP сервера ,не ставить 0.0.0.0
hlds_port="27015" #Порт сервера
hlds_gametype="cstrike" #Тип игры
hlds_players="32" #Максимальное количество игроков на сервере
hlds_map="de_dust2x2" #Имя первоначальной карты при запуске
hlds_options="-pingboost 1 -debug" #Дополнительные параметры запуска
condebug="1" #Включить логи в файле qconsole.log из папки cstrike
priority="-10" #Приоритет для сервера (-20 - Высокий ;20 - Низкий)
usecore="0,1" #Привязка к процессору (0, 1, 2, 3)
allcore="0,1" #Пропишите числа ядров ,начиная с 0 (0,1 - двухядерный)
hlds_pid="$screen_name.pid" #Имя pid файла сервера
screen_pid="$screen_name-screen.pid" #Имя pid файла screen-a
clear_logs="0" # очишать лог файлы при запуске сервера через скрипт?

start_cmd="/usr/bin/screen -A -m -d -S $screen_name"
checker_cmd="/usr/bin/quakestat" #Команда пакета qStat отвечающего за проверку сервера

################# ВНИМАНИЕ ###################
#
# Строчки ниже, если не знаете, лучше не трогать!
#
################# ВНИМАНИЕ ###################

succes="[\033[1;32m ОК \033[0m]"
failed="[\033[1;31m FAIL \033[0m]"
status_on="[\033[1;32m Online \033[0m]"
status_off="[\033[1;31m Offline \033[0m]"
title="\033[1;34m [::]\033[0m"

if [ $condebug = 1 ]; then
hlds_options2="-condebug"
fi

# Команда screen
# start_cmd="taskset -c $use_core /usr/bin/screen -A -m -d -S $screen_name"


if [ ! -x $path/hlds_run ]; then
printf "\033[22;31m Проверьте права на исполнение hlds_run \033[0m\n"
exit 1
fi

prestart_check() {
if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then
ch=`ps -ef | grep SCREEN | grep $hlds_port`
if [ -n "$ch" ]; then
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "\033[1;34m Сервер $server_name\033[0m \033[32m(!!) на данный момент УЖЕ работает (!!)\033[0m\n"
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
exit 1
else
cd $path
rm -rf $path/$screen_pid
rm -rf $path/$hlds_pid
fi
fi
}

start() {
# Проверка престартовая
prestart_check
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cd $path
sudo -u $use_user chmod -R 777 *
sudo -u $use_user chown -R $use_user *
$start_cmd sudo -u $use_user ./hlds_run -binary ./$hlds_binary -game $hlds_gametype +maxplayers $hlds_players +map $hlds_map +ip $hlds_ip +port $hlds_port $hlds_options $hlds_options2 -pidfile $hlds_pid
if [ $clear_logs == 1 ]; then
sudo -u $use_user rm -f $path/debug.log
sudo -u $use_user rm -f $path/cstrike/qconsole.log
sudo -u $use_user rm -f $path/cstrike/logs/*.log
sudo -u $use_user rm -fr $path/cstrike/addons/amxmodx/logs/*.log
fi
# Поиск и запись пидов процессов сервера и скринв системе
ps -ef | grep SCREEN | grep "$hlds_port" | grep -v grep | awk '{ print $2}' > $path/$screen_pid
printf "$title\033[1;34m Запуск сервера $server_name \033[0m\n"
printf "\033[1;35m Адрес сервера:\033[0m \033[1;36m$hlds_ip:$hlds_port\033[0m\n"
printf "\033[1;35m Привязка к ядру:\033[0m \033[1;36m$usecore\033[0m\n"
printf "\033[1;35m Приоритет сервера:\033[0m \033[1;36m$priority\033[0m\n"
printf "\033[1;35m Запуск от юзера:\033[0m \033[1;36m$use_user\033[0m\n"
printf "\033[1;35m Очишать логи при запуске:\033[0m \033[1;36m$clear_logs\033[0m\n"
printf "\033[1;35m Статус ~> \033[0m"
sleep 2

if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then
ch=`ps -ef | grep SCREEN | grep $screen_name`
if [ -n "$ch" ]; then
printf "%53s$succes \n"
else
printf "%53s$failed \n"
fi
fi
hlds_pid_num=`cat $path/$hlds_pid` #Определяет число pid от сервака
sudo taskset -pc $usecore $hlds_pid_num
sudo renice -n $priority -p $hlds_pid_num
sudo -u $use_user chmod -R 777 *
sudo -u $use_user chown -R $use_user *
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}

stop() {
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ -f $path/$hlds_pid ] && [ -f $path/$screen_pid ]; then
sudo -u $use_user kill `cat $path/$hlds_pid`
sudo -u $use_user kill `cat $path/$screen_pid`
sleep 1
sudo -u $use_user rm -rf $path/$screen_pid
sudo -u $use_user rm -rf $path/$hlds_pid
printf "$title\033[1;31m Остановка $server_name \033[0m"
printf "%33s$succes \n"
else
printf "\033[1;34m Невозможно остановить $server_name, сервер НЕ запущен \033[0m"
printf "%53s$failed \n"
fi
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}

status() {
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "$title\033[1;34m Статус сервера $server_name \033[0m\n"
printf "\033[1;35m Адрес сервера:\033[0m \033[1;36m$hlds_ip:$hlds_port\033[0m\n"
printf "\033[1;35m Привязка к ядру:\033[0m \033[1;36m$usecore\033[0m\n"
printf "\033[1;35m Приоритет сервера:\033[0m \033[1;36m$priority\033[0m\n"
printf "\033[1;35m Запуск от юзера:\033[0m \033[1;36m$use_user\033[0m\n"
printf "\n"
sudo -u $use_user quakestat -a2s $hlds_ip:$hlds_port
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}

console() {
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if [ -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 " Консоль включится через 1 секунд..."
sleep 1
sudo -u $use_user /usr/bin/screen -wipe
sudo -u $use_user /usr/bin/screen -d `cat $path/$screen_pid`
sudo -u $use_user /usr/bin/screen -R `cat $path/$screen_pid`
else
printf "\033[1;31m Невозможно подключиться к $server_name, сервер не запущен \033[0m\n"
fi
}

checker() {
checktag="\033[1;29m [HLDS-CheckUP] \033[0m"
checkdown=`$checker_cmd -a2s $hlds_ip:$hlds_port | grep DOWN`
if [ -n "$checkdown" ]; then
printf "$checktag $server_name \033[31m*[DOWN]*\033[0m\n"
# echo Отсылаем почту
time=`date +%X`
date=`date +%D`
inlog=`$checker_cmd -a2s $hlds_ip:$hlds_port | grep DOWN`
printf "[$time - $date] *[DOWN]* $inlog\n" >> $path/checker.log
stop
sleep 2
start
sleep 1
echo ----------------ATTANTION---------------- >> $path/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 ----------------------------------------- >> $path/checker.log
exit 1
fi
checknoresp=`$checker_cmd -a2s $hlds_ip:$hlds_port | grep response`
if [ -n "$checknoresp" ]; then
printf "$checktag $server_name \033[31m*[DOWN]*\033[0m\n"
# echo Отсылаем почту
time=`date +%X`
date=`date +%D`
inlog=`$checker_cmd -a2s $hlds_ip:$hlds_port | grep response`
printf "[$time - $date] *[NO RESPONSE]* $inlog\n" >> $path/checker.log
stop
sleep 2
start
sleep 1
echo ----------------ATTANTION---------------- >> $path/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 ----------------------------------------- >> $path/checker.log
exit 1
fi
checkup=`$checker_cmd -a2s $hlds_ip:$hlds_port | grep cstrike`
if [ -n "$checkup" ]; then
printf "$checktag $server_name \033[32m*[OK]*\033[0m\n"
time=`date +%X`
date=`date +%D`
inlog=`quakestat -a2s $hlds_ip:$hlds_port | grep cstrike`
printf "[$time - $date] *[OK]* $inlog\n" >> $path/checker.log
fi
hlds_pid_num=`cat $path/$hlds_pid` #Определяет число pid от сервака
check_allcore=`sudo taskset -pc "$hlds_pid_num" | grep $allcore`
check_usecore=`sudo taskset -pc $hlds_pid_num | grep $usecore`
if [ $usecore == $allcore ]; then
sudo renice -n $priority -p $hlds_pid_num
exit 1
else
if [ -n "$check_allcore" ]; then
printf "$checktag \033[31m*[BAD PRIORITY]*\033[0m\n"
time=`date +%X`
date=`date +%D`
sudo taskset -pc $usecore $hlds_pid_num
sudo renice -n $priority -p $hlds_pid_num
printf "[$time - $date] *[PRIORITY & AFFINITY RESETED]*\n" >> $path/checker.log
exit 1
fi
if [ -n "$check_usecore" ]; then
printf "$checktag \033[32m*[GOOD PRIORITY]*\033[0m\n"
exit 1
fi
fi
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 2
start
;;
status)
status
;;
console)
console
;;
checker)
checker
;;
*)
echo "Как юзать: $0 {start|stop|restart|status|console|checker}"
start
exit 1
esac
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя 330863
сообщение 27.11.2010, 15:54
Сообщение #8


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

Добавлю что ешё заметил одно исключение ,сервер на линуксе работает лучше БЕЗ привязки по ядрам ,тк в линуксе ядро балансирует сервер так чтоб небыли 1 ядро допустим 60% а второй 20% :biggrin: а делает так чтоб было более менее одинакого !!

От себя могу сказать просто что на линухе лучше не запускать сервер по ядрам (на винде можно тк лучше)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GODZILLA
сообщение 29.11.2010, 0:57
Сообщение #9


Стаж: 16 лет

Сообщений: 1471
Благодарностей: 440
Полезность: 716

usecore="" оставить пустым ?

Цитата
сервис server не поддерживает chkconfig


как же без этого ? CentOS

Ещё не пишет, что прав недостаточно на hlds_run, хотя только что заменил скрипт LeXikoN'a этим...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 29.11.2010, 8:05
Сообщение #10


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

GODZILLA,
так ты проверь значение path="..." и потом смотри если от скажет что нету прав :)

usecore="0,1" - для двухядерных машин ,для одноядерок 0 ,также allcore="..." < ставиш значения в зависимости какой у тебя процессор ,двухядерный 0,1 ,одноядерный 0
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя GODZILLA
сообщение 29.11.2010, 12:18
Сообщение #11


Стаж: 16 лет

Сообщений: 1471
Благодарностей: 440
Полезность: 716

Код
chown: изменение владельца `server-screen.pid': Операция не позволяется


так пишет про все файлы сервера.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 29.11.2010, 13:07
Сообщение #12


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

GODZILLA,
выдай права етому пользователю на изменение прав в папке где сервак сидит)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 30.11.2010, 23:10
Сообщение #13


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

UPD:

Версия:
Цитата
v1.09

Изменения:
Цитата
- Добавил отдельную поддержку под рута ,удобно если администраторы работают только под рута
- Поменял язык скрипта на английский (кроме настроек) ,почему ? чтобы небыло каракулей в консоли :)
- Обновил чекер серверов (теперь небудет ложно перезагружать сервер :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя GODZILLA
сообщение 3.12.2010, 21:50
Сообщение #14


Стаж: 16 лет

Сообщений: 1471
Благодарностей: 440
Полезность: 716

Код
сервис server не поддерживает chkconfig


а это исправлять собираешься ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 3.12.2010, 22:33
Сообщение #15


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

GODZILLA,
немогу понять из за чего ето ,что делал ,не менял скрипт ? я не экстрасэнс ,и не гений в линуксе)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GODZILLA
сообщение 6.12.2010, 11:17
Сообщение #16


Стаж: 16 лет

Сообщений: 1471
Благодарностей: 440
Полезность: 716

Ничего не менял :)
Щас использую скрипт LeXiKoN'a , т.к. он добавляется в автозагрузку
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя lexikon
сообщение 7.12.2010, 11:09
Сообщение #17


Стаж: 14 лет

Сообщений: 35
Благодарностей: 27
Полезность: 543

предлагаю тебе еще осилить то что мне стало впадлу :biggrin:
я хотел добавить возможность оповещения администратора по email о том что сервер упал с последними 20 строками из логов...точную дату и время...
а еще оповещение по смс на номер телефона sad.gif

о чем кстати написано вверху? "выставление на ядро"
вроде было реализовано с самого начала!

советую убрать выставление прав перед запуском...лишний фриз...к примеру джамп севрер весит около 5 Гб...лучше права чекать раз в месяц ручками!!

ааа ну и с приоритетами под линуксом играть вредно имхо((((

а так молодец что занялся!

Отредактировал: lexikon, - 7.12.2010, 11:14
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 7.12.2010, 12:41
Сообщение #18


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

lexikon,
мм ,по емайлу ,да не :biggrin: ето слишком круто ,но мало кто будет смотреть на мыло ,и мало админов держит сервы на компах где есть полный доступ к линухе ,на хостинг кс серваков такое не поставиш))))

выставление на ядро переделал просто :)
также выставление приоритета помогает ,лично видел больше смысла из -10 приоритета и выставление на оба ядра ,чем 0 приоритет и выставление на 1 ядро))))))

выставление прав убрал тк и вправду замедляет запуск :)

Спасибо blush2.gif drinks.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя lexikon
сообщение 7.12.2010, 19:19
Сообщение #19


Стаж: 14 лет

Сообщений: 35
Благодарностей: 27
Полезность: 543

к сожалению обновил версию скрипта
Брать тут
0.94! К обновлению ОБЯЗАТЕЛЕН!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя 330863
сообщение 7.12.2010, 19:38
Сообщение #20


Стаж: 14 лет

Сообщений: 4358
Благодарностей: 1079
Полезность: 497

lexikon,
гуд) ,только не всё будут использовать) ,хотя не проблема поправить под себя :wink:
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
14 страниц V   1 2 ... 12 13 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: