Как запускать сервера CS1.6 в виде сервисов linux |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Как запускать сервера CS1.6 в виде сервисов linux |
Sobig |
26.4.2007, 11:04
Сообщение
|
|
Статья "Как запускать сервера CS1.6 в виде сервисов linux".
Теория. Все сталкивались с проблемой запуска нескольких серверов CS1.6 под linux. Запустить их не проблема, а вот убить или перезапустить конкретный, не трогая остальные - проблема, тем более в терминале или через screen все это делать очень неудобно. В терминале - потому что их 6 (если у вас физический доступ к серверу), а через screen не то... Я нашел простое решение - запуск в виде сервиса. Что нам надо? Всего лишь готовый и пропатченный дистрибутив игры и немного времени. Сейчас пойдет описание кода, пояснение к которому появится позже (я сейчас на работе, а работа, как известно, стоит денег). Итак, для начала - сервис - это какая либо программа, запускаемая через команду service blabla start. При использовании сервиса есть много плюсов, а именно: + всегда можно запустить сервер + всегда можно перезапустить сервер + всегда можно остановить сервер + всегда можно мониторить статус сервера PS: я использую дистрибутив Suse Linux Enterprice Server 10, свежий и отлично работающий. PS2: не забудьте поставить midnight commander aka mc. Практика. Допустим, что ваш сервер для мяса лежит в папке /srv/games/nosteam/pub В папке /srv/games/nosteam/pub есть 2 нужных нам файла: hlds_i686 (или аналоги, в зависимости от того, какой процессор на сервере) и hlds_run. Запускаем mc и жмем F6 на файле hlds_run, вводим новое имя файла hlds_run_pub1. Далее жмем F4 на новом hlds_run_pub1 и потом F7, вводим в строку поиска "HL=./hlds_i686" и находим 2 нужных значения в 274 и в 290 строках. Заменяем их на "HL=./hlds_i686_pub1" - просто дописываем краткое описание конкретного назначения сервера. В моем случае это мяско. Если у вас процессоры от AMD, то в поиске введите "HL=./hlds_amd". Нужные значения есть в 260, 263, 287 строках. Заменяйте на аналог "HL=./hlds_amd_pub1". В статье будет описание только для i686, остальное делается аналогично. Далее переименовываем файл hlds_i686 в hlds_i686_pub1. Это делается для того, чтобы hlds_run_pub1 нашел приложение и запустил его с нужными параметрами. Ну вот, теперь один сервер из папки /srv/games/nosteam/pub запустится. Сделайте еще один тем же путем. Ну а теперь самое интересное - сервисы! Вот код из файла /etc/init.d/omega-online-nosteam-pub-1 (назовите как угодно, лишь бы вы не забыли название ;)). В статье пусть будет pub1. Код #!/bin/bash # Copyright (c) 2007 Omega Sector. All rights reserved. # # Author: Stanislav Batnikov <Sobig@omega-sector.kz> # # /etc/init.d/omega-online-nosteam-pub-1 # # ### BEGIN INIT INFO # Provides: omega-online-nosteam-pub-1 # Description: Counter-Strike 1.6 NoSteam linux dedicated server starting service ### END INIT INFO RETVAL=0 path="/srv/games/nosteam/pub" start() { if [ -d $path ]; then cd $path ./hlds_run_pub1 +sv_lan 1 -debug -insecure -game cstrike -nomaster +maxplayers 24 +port 27001 +ip 10.10.27.10 +exec pub1.cfg +map de_dust2 -pingbooster 1 -pidfile pub1.pid& touch ./pub1.run fi } stop() { if [ -f $path/pub1.run ]; then killall hlds_run_pub1 killall hlds_i686_pub1 cd $path rm -R pub1.pid rm -R ./pub1.run fi } status() { cd $path; [ -f $path/pub1.pid ] } . /etc/rc.status rc_reset case "$1" in start) start rc_status -v ;; stop) stop rc_status -v ;; status) status rc_status -v ;; restart) stop start rc_status -v ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac rc_exit exit $RETVAL А теперь нужные пояснения к коду. Код # Copyright (c) 2007 Omega Sector. All rights reserved. # # Author: Stanislav Batnikov <Sobig@omega-sector.kz> # # /etc/init.d/omega-online-nosteam-pub-1 # # ### BEGIN INIT INFO # Provides: omega-online-nosteam-pub-1 # Description: Counter-Strike 1.6 NoSteam linux dedicated server starting service ### END INIT INFO Мои комменты и копирайты. Оставлять или нет - решайте сами. Я это делаю, чтобы самому потом легче было копаться в файлах. Код path="/srv/games/nosteam/pub" Путь к папке с игрой. Код start() { if [ -d $path ]; then cd $path ./hlds_run_pub1 +sv_lan 1 -debug -insecure -game cstrike -nomaster +maxplayers 24 +port 27001 +ip 10.10.27.10 +exec pub1.cfg +map de_dust2 -pingbooster 1 -pidfile pub1.pid& touch ./pub1.run fi } Описание того, что будет делать команда start. Код stop() { if [ -f $path/pub1.run ]; then killall hlds_run_pub1 killall hlds_i686_pub1 cd $path rm -R pub1.pid rm -R ./pub1.run fi } Описание того, что будет делать команда stop. Код status() { cd $path; [ -f $path/pub1.pid ] } Описание того, что будет делать команда status. Код . /etc/rc.status rc_reset Указание файла со статусами и сброс статусов для этого сервиса. Код case "$1" in start) start rc_status -v ;; stop) stop rc_status -v ;; status) status rc_status -v ;; restart) stop start rc_status -v ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac Это самое интересное. Команды {start|stop|restart|status} будут управлять статусом сервиса и следовательно показывать, что и как. Например есть не запущенный сервер pub1. В консоли пишем следующее: service pub1 status - dead service pub1 start - done service pub1 status - running service pub1 restart - done, done service pub1 status - running service pub1 stop - done service pub1 status - dead Напоминаю, что pub1 - это название файла из папки /etc/init.d Если все будет также, значит мы молодцы и у нас все работает. Код rc_exit Выход их статусов. Теперь для удобства мониторинга большого количества серверов надо сделать следующий скрипт: Код #!/bin/sh echo "pub1 @ 10.10.27.10:27001"; service pub-1 status echo "pub2 @ 10.10.27.10:27002"; service pub-2 status Оба сервера покажут свои статусы сразу. У меня 8 серверов и 8 HLTV, поэтому этот скрипт незаменим. PS: чтобы запустить скрипт, заходим в папку, где он хранится и пишем ./name_of_script Пока все, но я еще дополню статью своими нововведениями. PS: все, что я написал, возможно было придумано до меня, но я просто сделал все это более удобным. Пользуйтесь и помните: Знания принадлежат всему человечеству!
|
Поблагодарили 10 раз
|
|
dcsk |
26.4.2007, 16:18
Сообщение
|
А если обновлятся прийдется? Но в принципе идея хорошая, я как-то не подумал....
|
|
|
|
Sobig |
27.4.2007, 6:44
Сообщение
|
|
|
|
|
dcsk |
27.4.2007, 9:10
Сообщение
|
Отделил, поднял и прилепил.
ЗЫ новые статьи лучше в новые темы добавлять. ;) |
|
|
|
Traffic |
24.5.2007, 19:17
Сообщение
|
|
Скажите плиз очень нада паследняя версия CS 1.6 для Linux желатель с обнавленой сервернойц частью Где можна скачать !!! Please Please Please
Отредактировал: Traffic, - 24.5.2007, 19:19
|
|
|
Sobig |
25.5.2007, 5:59
Сообщение
|
|
|
|
|
ilya300 |
11.6.2007, 17:55
Сообщение
|
|
Если у вас процессоры от AMD, то в поиске введите "HL=./hlds_amd". Нужные значения есть в 260, 263, 287 строках. Заменяйте на аналог "HL=./hlds_amd_pub1". В статье будет описание только для i686, остальное делается аналогично. а как узнать какой проц на серваке? (сервер находится в серверной) =) |
|
|
ilya300 |
11.6.2007, 19:08
Сообщение
|
|
при запуске скрипта
Код echo "pub1 @ 10.10.27.10:27001"; service pub-1 status выдается такая фигняКод [root@cs root]# service pub1 status
/etc/init.d/pub1: line 40: rc_reset: command not found /etc/init.d/pub1: line 52: rc_status: command not found /etc/init.d/pub1: line 63: rc_exit: command not found |
|
|
Sobig |
12.6.2007, 8:34
Сообщение
|
|
при запуске скрипта Код echo "pub1 @ 10.10.27.10:27001"; service pub-1 status выдается такая фигняКод [root@cs root]# service pub1 status /etc/init.d/pub1: line 40: rc_reset: command not found /etc/init.d/pub1: line 52: rc_status: command not found /etc/init.d/pub1: line 63: rc_exit: command not found Какой дистрибутив? |
|
|
sirian |
12.6.2007, 9:50
Сообщение
|
у меня тоже самое, стоит red hat
|
|
|
|
Sobig |
12.6.2007, 10:16
Сообщение
|
|
|
|
|
ilya300 |
19.6.2007, 1:44
Сообщение
|
|
мандрива 10 (вроде как))
|
|
|
Sobig |
20.6.2007, 5:42
Сообщение
|
|
Код #!/bin/bash # Copyright (c) 2007 Omega Sector. All rights reserved. # # Author: Stanislav Batnikov <Sobig@omega-sector.kz> # # /etc/init.d/omega-online-nosteam-pub-1 # # ### BEGIN INIT INFO # Provides: omega-online-nosteam-pub-1 # Description: Counter-Strike 1.6 NoSteam linux dedicated server starting service ### END INIT INFO RETVAL=0 path="/srv/games/nosteam/pub" start() { if [ -d $path ]; then cd $path ./hlds_run_pub1 +sv_lan 1 -debug -insecure -game cstrike -nomaster +maxplayers 24 +port 27001 +ip 10.10.27.10 +exec pub1.cfg +map de_dust2 -pingbooster 1 -pidfile pub1.pid& touch ./pub1.run fi } stop() { if [ -f $path/pub1.run ]; then killall hlds_run_pub1 killall hlds_i686_pub1 cd $path rm -R pub1.pid rm -R ./pub1.run fi } status() { cd $path; [ -f $path/pub1.pid ] } case "$1" in start) start echo "CS Server-1 starting" ;; stop) stop echo "CS Server-1 stoping" ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac rc_exit exit $RETVAL Этот код попробуй, только ты не сможешь просматривать статус сервера через rc. Только через top. |
Поблагодарили 1 раз
|
|
zveryga |
8.9.2007, 11:56
Сообщение
|
спасибо за скрипт всё отлично
Отредактировал: zveryga, - 8.9.2007, 12:09
|
|
|
|
Xp0Huk |
20.8.2008, 11:09
Сообщение
|
|
Sobig помоги запуском я новичек в линукс, у меня ubuntu-8.04-desktop-i386
я скачал mc через Synaptic но незнаю как ево запустить |
|
|
Hooligan Crapy4ino |
20.8.2008, 14:57
Сообщение
|
|
Sobig
не по теме ... а как можно тоже самое в windows xp сделать???? если не сложно ссылочку кинь иль обьясни как нибудь))) |
|
|
bravo |
20.8.2008, 16:58
Сообщение
|
|
Xp0Huk в конесоле команда mc - если у тебя стоят иксы (визуальное оформление) то можно в менюшках поискать, куда он там упал.
Hooligan Crapy4ino вопрос интересный... наверное. но врядли. я когда то пытался. вообщем зачада найти программу которая забубенит другую программу в сервис винды. есть предположение, что врдяли оно будет правильно работать... что в винде не предназначено для такого использования, там может не получиться заставить правильно работать... да и инструметов там не оч много для этого.
Отредактировал: bravo, - 20.8.2008, 16:59
|
|
|
Hooligan Crapy4ino |
20.8.2008, 19:28
Сообщение
|
|
но видь антивирусы ка то так работают????? и всякие там анти шпионы?? помоему можно как то сделать
|
|
|
Sobig |
21.8.2008, 18:20
Сообщение
|
|
Sobig не по теме ... а как можно тоже самое в windows xp сделать???? если не сложно ссылочку кинь иль обьясни как нибудь))) FireDaemon |
|
|
Hooligan Crapy4ino |
21.8.2008, 18:43
Сообщение
|
|
|
|
|