Удобный скрипт запуска сервера кс :) |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Удобный скрипт запуска сервера кс :) |
330863 |
20.11.2010, 13:07
Сообщение
|
|
Наткнулься ранее на один хорошый скрипт запуска сервера кс на линух ,и решил добавить пару фич в нём.
Изменения Цитата - Оптимизация всего скрипта * Улучшен алгоритм проверки серверов которые умерли (работает в 2 раза быстрее) * Подключение к консоли улучшено * Сделано нормальное отключение сервера (quit) + Добавлена проверка приоритета сервера и его востановление в случий если сервер крэшнулся и приоритет выставился по дефольту 0 (важно!) + Написал простую инструкцию установки :) Как юзать ?: ИМЯ_СКРИПТА start - запуск сервера ИМЯ_СКРИПТА stop - остановка сервера ИМЯ_СКРИПТА restart - перезапуск сервера ИМЯ_СКРИПТА console - открыть консоли сервера ИМЯ_СКРИПТА status - проверка статуса сервака с выводом статы в консоли ИМЯ_СКРИПТА checker - команда полезная для выполнения через крон ,выполняет проверку сервера на предмет онлайна ,если серв будет в оффе или не отвечать скрипт его перезапустит :) также возврашает старый приоритет) Что нужно чтобы скрипт работал ? screen taskset renice ну и сам сервер Автор: Puma aka 330863 Скачать: Скрипт_для_запуска_HLDS_сервера_v1.2.zip ( 218,05 килобайт ) Кол-во скачиваний: 2440 Думаю больше обновлений небудет, тк идей нету Минута прошла а баг маленький нашёл
Отредактировал: 330863, - 11.7.2011, 9:05
|
Поблагодарили 28 раз
|
|
bravo |
20.11.2010, 17:40
Сообщение
|
|
перетащил. молодец что не пожадничал
|
|
|
330863 |
20.11.2010, 19:53
Сообщение
|
|
bravo,
ну я ранее писал что вылажу сие своё творение :) |
|
|
Ser_UFL |
20.11.2010, 20:33
Сообщение
|
|
Цитата #IP сервера ,не ставить 0.0.0.0 !!! Почему? |
|
|
330863 |
20.11.2010, 21:32
Сообщение
|
|
Ser_UFL,
хмм ,поставить та можно ,но если поставить 0.0.0.0 то уже небудет работать server_pub checker ,тк там проверка выполняеться с помошью quakestat -a2s 0.0.0.0:ПОРТ ,выставив 0.0.0.0 quakestat небудет понимать что проверять ,и скрипт тупо перезапустит сервак |
|
|
jeka2009 |
23.11.2010, 16:43
Сообщение
|
|
Спасибо.Будем пользоваться :biggrin:
|
|
|
330863 |
27.11.2010, 11:39
Сообщение
|
|
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
Сообщение
|
|
Добавлю что ешё заметил одно исключение ,сервер на линуксе работает лучше БЕЗ привязки по ядрам ,тк в линуксе ядро балансирует сервер так чтоб небыли 1 ядро допустим 60% а второй 20% :biggrin: а делает так чтоб было более менее одинакого !!
От себя могу сказать просто что на линухе лучше не запускать сервер по ядрам (на винде можно тк лучше) |
|
|
GODZILLA |
29.11.2010, 0:57
Сообщение
|
|
usecore="" оставить пустым ?
Цитата сервис server не поддерживает chkconfig как же без этого ? CentOS Ещё не пишет, что прав недостаточно на hlds_run, хотя только что заменил скрипт LeXikoN'a этим... |
|
|
330863 |
29.11.2010, 8:05
Сообщение
|
|
GODZILLA,
так ты проверь значение path="..." и потом смотри если от скажет что нету прав :) usecore="0,1" - для двухядерных машин ,для одноядерок 0 ,также allcore="..." < ставиш значения в зависимости какой у тебя процессор ,двухядерный 0,1 ,одноядерный 0 |
Поблагодарили 1 раз
|
|
GODZILLA |
29.11.2010, 12:18
Сообщение
|
|
Код chown: изменение владельца `server-screen.pid': Операция не позволяется так пишет про все файлы сервера. |
|
|
330863 |
29.11.2010, 13:07
Сообщение
|
|
GODZILLA,
выдай права етому пользователю на изменение прав в папке где сервак сидит) |
|
|
330863 |
30.11.2010, 23:10
Сообщение
|
|
UPD:
Версия: Цитата v1.09 Изменения: Цитата - Добавил отдельную поддержку под рута ,удобно если администраторы работают только под рута
- Поменял язык скрипта на английский (кроме настроек) ,почему ? чтобы небыло каракулей в консоли :) - Обновил чекер серверов (теперь небудет ложно перезагружать сервер :) |
Поблагодарили 1 раз
|
|
GODZILLA |
3.12.2010, 21:50
Сообщение
|
|
Код сервис server не поддерживает chkconfig а это исправлять собираешься ? |
|
|
330863 |
3.12.2010, 22:33
Сообщение
|
|
GODZILLA,
немогу понять из за чего ето ,что делал ,не менял скрипт ? я не экстрасэнс ,и не гений в линуксе) |
|
|
GODZILLA |
6.12.2010, 11:17
Сообщение
|
|
Ничего не менял :)
Щас использую скрипт LeXiKoN'a , т.к. он добавляется в автозагрузку |
|
|
lexikon |
7.12.2010, 11:09
Сообщение
|
|
предлагаю тебе еще осилить то что мне стало впадлу :biggrin:
я хотел добавить возможность оповещения администратора по email о том что сервер упал с последними 20 строками из логов...точную дату и время... а еще оповещение по смс на номер телефона о чем кстати написано вверху? "выставление на ядро" вроде было реализовано с самого начала! советую убрать выставление прав перед запуском...лишний фриз...к примеру джамп севрер весит около 5 Гб...лучше права чекать раз в месяц ручками!! ааа ну и с приоритетами под линуксом играть вредно имхо(((( а так молодец что занялся!
Отредактировал: lexikon, - 7.12.2010, 11:14
|
|
|
330863 |
7.12.2010, 12:41
Сообщение
|
|
lexikon,
мм ,по емайлу ,да не :biggrin: ето слишком круто ,но мало кто будет смотреть на мыло ,и мало админов держит сервы на компах где есть полный доступ к линухе ,на хостинг кс серваков такое не поставиш)))) выставление на ядро переделал просто :) также выставление приоритета помогает ,лично видел больше смысла из -10 приоритета и выставление на оба ядра ,чем 0 приоритет и выставление на 1 ядро)))))) выставление прав убрал тк и вправду замедляет запуск :) Спасибо |
Поблагодарили 1 раз
|
|
lexikon |
7.12.2010, 19:19
Сообщение
|
|
|
|
|
330863 |
7.12.2010, 19:38
Сообщение
|
|
lexikon,
гуд) ,только не всё будут использовать) ,хотя не проблема поправить под себя :wink: |
|
|