как правильно запускать сервер?, подскажите новичку |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
|
как правильно запускать сервер?, подскажите новичку |
viktor6
|
28.1.2010, 18:13
Сообщение
|
|
|
Вот нарыл в инете несколько разных скриптов запуска и управления сервера CS
а вот вообще интересная статейка 1) Распределение имен процессов (делается не всегда, только при явных разделениях выполняемых задач). Для удобной работы и анализа hlds процесса необходимо их как то различать (если у Вас более 1-го сервера на одном железе). У каждого сервера есть своя сошки hlds_run и hlds_i686 (если не другая архитектура сервера ). - открываем приложение hlds_run редактором или через mc терминала putty F4 - ищем строки с содержанием hlds_i686 и меняем в трех местах на hlds_i686_сlassic (пример). - находим DEBUG="0" и меняем на DEBUG="" - закрываем hlds_run и переименовываем сошки на hlds_i686 >>> hlds_i686_сlassic ; hlds_run >>> hlds_run_classic - при запуске hlds_run_classic в ТОПе должен виден запущенный процесс hlds_i686_сlassic. 2) Разброс серверов по ядрам. -1й способ: Привязка процесса с pid хххххх к первому CPU (#0): taskset -c 1 -p xxxxx привязка сразу к двум taskset -c 1,2 -p xxxxx где ххххх - пид процесса где С - приоритет работы процесса. Код -с1 реальное время (real time) -с2 наилучшая работа (best effort) -с3 бездействие (idle) -2й способ: taskset -p 0x00000001 xxxxx taskset -p 0x00000002 yyyyy Вопрос - где взять номер pid, будет понятно в пункте 4. Так же можно вписать процесc разброса по ядрам в сам скрипт запуска. 3) Установка скриптов Создаем редактором файл с кодировкой Unix формата, расширение не указываем. К примеру называем файл скрипта hlds_classic Сам скрипт: Цитата #!/bin/bash # for ALFA-STRIKE project # Credit: [A]SECTOR {www.alfa-strike} # email: sectorrusso@gmail.com # /etc/init.d/hlds_classic # # ### BEGIN INIT INFO # Provides: hlds_classic # Description: Counter-Strike 1.6 NoSteam linux dedicated server starting service ### END INIT INFO RETVAL=0 #Путь к серверу path="/home/cs/classic" start() { if [ -d $path ]; then cd $path #Строка запуска каждого сервера sudo -u cs ./hlds_run_classic -binary ./hlds_i686_classic -noipx -nojoy -insecure -game cstrike +maxplayers 24 +port 27015 +ip xx.xxx.xx.xx +sv_lan 0 +exec server.cfg +map de_dust -pingboost 2 -pidfile hlds_classic.pid& #где xx.xxx.xx.xx ваш айпи адрес и меняем на свой порт. touch ./hlds_classic fi } stop() { #if [ -f $path/hlds_classic.run ]; then killall hlds_run_classic killall hlds_i686_classic #kill 'cat hlds_classic.pid' cd $path rm -R hlds_classic.pid rm -R cron.log #запись информации в лог файл cron.log можно отключить в самом crontab, соответственно эту строку в скрипте закоментируем. #rm -R ./hlds_classic #fi } #Статус >>> старт,рестарт,остановка сервера status() { cd $path; [ -f $path/hlds_classic.pid ] } case "$1" in start) start echo "CS Server_classic starting" ;; stop) stop echo "CS Server_classic stoping" ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac Все скрипт готов, кидаем его в папку etc/init.d Cтоит обратить внимание перед строкой запуска сервера стоит sudo -u cs , где cs - наш условный пользователь. Cамим скриптам необходимо сменить владельца и выставить атрибуты (дать ему права), но не от рута: Код chown cs:cs hlds_classic chmod 774 hlds_classic Запуск: Код sudo /etc/init.d/hlds_classic start Остановка: Код sudo /etc/init.d/hlds_classic stop Рестарт: Код sudo /etc/init.d/hlds_classic restart !!! После запуска сервера В директории сервера появится файлик hlds_classic.pid , в котором и будет указан номер pid. 4) Автоподъем серверов И так бывают случаи, когда железо аварийно выключается (пропало питание и т.д.). При загрузке ОС железо продолжает работать а игровые сервера не стартуют. Тут стоит задача поставить наши скрипты в автозагрузку. Для этого удобнее создать скрипт (если у вас серверов несколько): Цитата #!/bin/sh # ##################################################### ##### start servers ALFA-STRIKE 66 by [A]SECTOR ##### ##################################################### /etc/init.d/hlds_classic start > /dev/null /etc/init.d/hlds_arena start > /dev/null echo "Use Commands: >>> Start all servers" exit $RETVAL Назовем скрипт Start_server (кодировка unix формат) и помещаем его так же в папку /etc/init.d/ Добавляем наш скрипт в автозагрузку и даем права для запуска от Root. Код # rc-update add Start_servers default 5) Очистка памяти (запланированный ребут) + логирование. К примеру на альфа серверах работает hlguard, сошка к-го съедаем за 2-3 дня оперативную память, что приводит к различным глюкам и нестабильности работы сервера. Для этого в ночное время мы делаем сброс лишней информации к-я накопилась (обнуляем память) путем технической остановки всех игровых серверов КС, на несколько минут. Очистка: Открываем редактор crontab командой: sudo crontab -e под своим пользователем или сразу под рутом. Вносим вручную строки как указано в примере на скрине, в зависимости от кол-ва серверов. На скрине видно что каждый день, в 5 утра сервер классик останавливается а в 05.05 стартует снова. Далее ctrl+x, Y enter (сохраняем). Становимся под рутом:команда sudo -s пишем пароль. Выполняем команды: Код killall cron /usr/sbin/cron Все крон настроен. Логирование: Для просмотра логов в кроне указана задача формировать логи, cron.log к-е лежат рядом с hlds_run. В к-х можно увидеть когда была перегрузка сервера. С скриптах сервера указана задача удалять старые логи rm -R cron.log, т.к. в лог он пишет все что выводится в консоль демона. Убрать логирование можно путем правки в crontab заменой >>/home/cs/classic/cron.log 2>&1 на >>/tmp/hlds_classic 2>&1 или > /dev/null Все готово! По настройке крона: Допустимые значения: минута от 0 до 59 час от 0 до 23 день_месяца от 1 до 31 месяц от 1 до 12 (можно три буквы из названия месяца, регистр не имеет значения от jan до dec) день_недели от 0 до 6 (0 это воскресенье, можно писать от sun до sat) Каждое из полей даты и времени может быть обозначено символом * ,будет соответствовать любому возможному значению. Для этих полей можно указывать диапазоны значений, разделенных дефисом, например: * 5 4-10 0-3 * echo "HELLO" -печать HELLO в 5:00 на 4,5,6,7,8,9,10 дни января, февраля, марта и апреля. 1 Цитата #!/bin/bash case "$1" in start) cd /home/viktor/KS_servera/GunGame screen -A -m -d -S cst \ ./hlds_run_gungames -game cstrike \ +port 27017 +map de_dust2 \ +maxplayers 22 -insecure +ip 10.100.146.15 -pingboost 2 -nomaster echo "Srart CS Server" ;; stop) screen -S cst -X quit echo "Stop CS Server" ;; restart) $0 stop sleep 5 $0 start echo "Restarting Gameserver: Counter-Strike 1.6" ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac 2 Цитата #!/bin/sh ##################################################### ##### start/stop/restart script v2 by sentenced ##### ##################################################### #srv1_name ; Server name, example cs_pub, do not use long names with spaces! #srv1_fname ; full server name like CS 1.6 PUB Server #srv1_script ; if server is hl1 then type hlds_run if server is hl2 or CS:S type srcds_run #srv1_ip ; IP address of server #srv1_port ; Server port #srv1_gametype ; Gametype, example cstrike, dods, or dod, etc. #srv1_players ; maximum players on server #srv1_map ; starting map #srv1_svlan ; sv_lan 0/1, if your server is nosteam you need to turn it on, type 1 #srv1_pid ; server uses this file to write there process id #srv1_heapsize ; this opt sets how much [max] RAM in kb server will use #srv1_opts ; type there other server opts, like -nomaster -insecure #################################################### srv1_name=gundames srv1_fname="gundames" srv1_dirpath="/home/viktor/KS_servera/GunGame" srv1_script=hlds_run srv1_ip=10.100.146.15 srv1_port=27017 srv1_gametype=cstrike srv1_players=20 srv1_map=de_dust2 srv1_svlan=1 srv1_pid=cspub.pid srv1_heapsize=256000 srv1_opts="-nomaster -insecure -pingboost 3" ##################################################### # don't tuch anything below this line! ##################################################### #srv1_chk=`screen -ls | grep $srv1_name` #srv1_chk=DATASVIT function srv1_started() { if [ -z $srv1_chk ]; then return 1 else return 0 fi } function srv1_stop() { /usr/bin/screen -d -r $srv1_name -X quit return 0 } function srv1_start() { srv1_started if [ $? -eq 0 ]; then return 1 fi cd $srv1_dirpath && screen -AmdS $srv1_name ./$srv1_script -game $srv1_gametype +maxplayers $srv1_players +map $srv1_map +port $srv1_port -heapsize $srv1_heapsize +sv_lan $srv1_svlan $srv1_opts -pidfile $srv1_pid return 0 } function srv1_echo() { echo -n $2 $1 if [ $? -eq 0 ]; then echo -e "\t\t[ OK ]" else echo -e "\t\t[FAIL]" fi return 0 } case $1 in start) srv1_echo srv1_start "STARTING $srv1_fname: `basename $0` start" ;; stop) srv1_echo srv1_stop "STOPING $srv1_fname: `basename $0` stop" ;; restart) srv1_echo srv1_stop "STOPING $srv1_fname: `basename $0` stop" srv1_echo srv1_start "STARTING $srv1_fname: `basename $0` start" ;; *) echo "Use Commands: `basename $0` start|stop|restart" ;; esac 3 Цитата #!/bin/bash srv_path="/home/viktor/KS_servera/GunGame_test/" srv_fname="gungame1" srv_hostname="GunGame Server" srv_chk=`screen -ls | grep -c $srv_fname` function srv_stop() { if [ "$srv_chk" -eq 0 ]; then return 1 fi screen -S $srv_fname -X quit >/dev/null 2>&1 return 0 } function srv_start() { if [ $srv_chk -eq 1 ]; then return 1 fi # export LD_LIBRARY_PATH="$srv_path:$LD_LIBRARY_PATH" #screen -wipe cd $srv_path && screen -AmdS $srv_fname ./hlds_run -pingboost 2 -binary ./hlds_i686 -console -game cstrike -insecure +maxplayers 32 +map de_dust2 +port 27018 -pidfile ./gungame.pid +sv_lan 0 return 0 } function srv_status() { printf "Server $srv_fname" if [ $srv_chk -eq 1 ]; then echo -e "\t\t[alive]" else echo -e "\t\t[down]" fi } function srv_print() { echo -n $2 $1 if [ $? -eq 0 ]; then echo -e "\t\t [ OK ]" else echo -e "\t\t [FAIL]" fi return 0 } case $1 in start) srv_print srv_start "Starting $srv_fname :" ;; stop) srv_print srv_stop "Stopping $srv_fname :" ;; status) srv_status ;; restart) $0 stop sleep 60 $0 start ;; *) echo "Use command: `basename $0` [start|stop|restart|status]" ;; esac 4 Цитата #! /bin/bash
# # Start the Counter-Strike dedicated server. # # AUTHORS : # # Julien Escario ( pandemik@azilog.net ) # & # Cedric Rochat ( crochat@younics.org ) # & # Cmdr._Firewalker ( cmdr._firewalker@web.de ) # # =========================================== # # What you need: # # Linux :) # awk # screen # the hlds_l & cstrike files (obtainable via steam) # # How to use: # # Edit the CS_USER-Var to the user running your cs-servers # Edit the DIR-Var to fit your system (just contains the path to the dir that contains hlds_run) # Edit the PARAMS-Var to fit your needs # - standard is startup as internet server # if you use multiple scripts on one system you should change the NAME-var (otherwise # all will be stopped if you run the script with "stop", and status will be useless) # # When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the # scripts for starting the services) and set the execute permission. # Now you can link the script to your runlevel-dir, here's an example for runlevel 3: # ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/S90hlds # ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/K50hlds # or use update-rc.d if you got a system using that tool (like Debian, see manpage) # # Or use it manually like: # ./hlds start # ./hlds stop # # To see the server-console start the script with the parameter "watch". # # DOC by jwm (jwm@counter-strike.de) # !!!!!!!!!!!!!! CHANGE THIS TO THE USER YOU USE FOR YOUR SERVER !!!!!!!!!!!!!!! CS_USER=csserveruser PATH=/bin:/usr/bin:/sbin:/usr/sbin # # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS! DIR=/hlds DAEMON=hlds_run # LAN server: # PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust" # Internet server: PARAMS="-game cstrike +map de_dust +maxplayers 12 -port 27015" NAME=csserver DESC="CS dedicated server" # No edits (should be) necessary beyond this line if [ ! -x `which awk` ]; then echo "You need awk for this script"; exit 1; fi if [ ! -x `which screen` ]; then echo "You need screen (the program, moron!) for this script"; exit 1; fi if [ `whoami` = root ] then usagetype=root else usagetype=nonroot fi start() { if [ ! -d $DIR ]; then echo " ... No such directory: $DIR!"; exit 1; fi if [ ! -x $DIR/$DAEMON ]; then echo "$DIR/$DAEMON does not exist or is not executable!"; exit 1; fi if status; then echo " ... $DESC: $NAME is already running!"; exit 1; fi case "$usagetype" in root) su - $CS_USER -c "cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS" ;; nonroot) cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS ;; esac } stop () { if ! status; then echo " ... $DESC $NAME could not be found. Probably not running."; exit 1; fi case "$usagetype" in root) tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') su - $CS_USER -c "screen -r $tmp -X quit" ;; nonroot) screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') -X quit ;; esac } status () { case "$usagetype" in root) su - $CS_USER -c "screen -ls" | grep [.]$NAME[[:space:]] > /dev/null ;; nonroot) screen -ls | grep [.]$NAME[[:space:]] > /dev/null ;; esac } watch () { if ! status; then echo "$DESC $NAME could not be found. Probably not running."; exit 1; fi case "$usagetype" in root) tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') su - $CS_USER -c "screen -r $tmp" ;; nonroot) screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') ;; esac } case "$1" in start) echo "Starting $DESC: $NAME" start echo " ... done." ;; stop) echo "Stopping $DESC: $NAME" stop echo " ... done." ;; restart) echo "Restarting $DESC: $NAME" stop sleep 5 start echo " ... done." ;; status) if status then echo "$DESC: $NAME is UP" else echo "$DESC: $NAME is DOWN" fi ;; watch) watch ;; *) echo "Usage: $0 {start|stop|status|restart|watch}\nWhile watching press ctrl-a, ctrl-d to stop watching without stopping the server." exit 1 ;; esac exit 0
Отредактировал: viktor6, - 28.1.2010, 18:18
|
Поблагодарили 2 раз
|
|
![]() ![]() |