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

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

^Место доступно для покупки - 4000 руб/мес^

Новости

17-апр
30-дек
29-дек
26-дек

4 страниц V   1 2 3 »

Как запускать сервера CS1.6 в виде сервисов linux

Статус пользователя Sobig
сообщение 26.4.2007, 11:04
Сообщение #1


Стаж: 10 лет

Сообщений: 334
Благодарностей: 87
Полезность: 224

Статья "Как запускать сервера 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 <[email protected]>
#
# /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 <[email protected]>
#
# /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
Сообщение #2
Стаж: 10 лет

Сообщений: 54
Благодарностей: 39
Полезность: 524

А если обновлятся прийдется? Но в принципе идея хорошая, я как-то не подумал....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sobig
сообщение 27.4.2007, 6:44
Сообщение #3


Стаж: 10 лет

Сообщений: 334
Благодарностей: 87
Полезность: 224

Цитата(dcsk @ 26.4.2007, 20:18) *
А если обновлятся прийдется? Но в принципе идея хорошая, я как-то не подумал....

Для обновления можно прописать -autoupdate и перезапускать сервер, когда надо.
Скоро еще статеек напишу для упрощения использования серверов.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя dcsk
сообщение 27.4.2007, 9:10
Сообщение #4
Стаж: 10 лет

Сообщений: 54
Благодарностей: 39
Полезность: 524

Отделил, поднял и прилепил.

ЗЫ новые статьи лучше в новые темы добавлять. ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Traffic
сообщение 24.5.2007, 19:17
Сообщение #5


Стаж: 10 лет

Сообщений: 85
Благодарностей: 5
Полезность: < 0

Скажите плиз очень нада паследняя версия CS 1.6 для Linux желатель с обнавленой сервернойц частью Где можна скачать !!! Please Please Please

Отредактировал: Traffic, - 24.5.2007, 19:19
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sobig
сообщение 25.5.2007, 5:59
Сообщение #6


Стаж: 10 лет

Сообщений: 334
Благодарностей: 87
Полезность: 224

Цитата(Traffic @ 24.5.2007, 23:17) *
Скажите плиз очень нада паследняя версия CS 1.6 для Linux желатель с обнавленой сервернойц частью Где можна скачать !!! Please Please Please

Строгое предупреждение от модератора Sobig
Для начала читай форум.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ilya300
сообщение 11.6.2007, 17:55
Сообщение #7


Стаж: 10 лет

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

Цитата(Sobig @ 26.4.2007, 9:04) *
Если у вас процессоры от AMD, то в поиске введите "HL=./hlds_amd". Нужные значения есть в 260, 263, 287 строках. Заменяйте на аналог "HL=./hlds_amd_pub1". В статье будет описание только для i686, остальное делается аналогично.

а как узнать какой проц на серваке?
(сервер находится в серверной) =)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ilya300
сообщение 11.6.2007, 19:08
Сообщение #8


Стаж: 10 лет

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

при запуске скрипта
Код
echo "pub1 @ 10.10.27.10:27001"; service pub-1 status
выдается такая фигня
Код
[[email protected] 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
Сообщение #9


Стаж: 10 лет

Сообщений: 334
Благодарностей: 87
Полезность: 224

Цитата(ilya300 @ 11.6.2007, 23:08) *
при запуске скрипта
Код
echo "pub1 @ 10.10.27.10:27001"; service pub-1 status
выдается такая фигня
Код
[[email protected] 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
Сообщение #10
Стаж: 10 лет

Сообщений: 42
Благодарностей: 15
Полезность: 273

у меня тоже самое, стоит red hat
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sobig
сообщение 12.6.2007, 10:16
Сообщение #11


Стаж: 10 лет

Сообщений: 334
Благодарностей: 87
Полезность: 224

Цитата(sirian @ 12.6.2007, 13:50) *
у меня тоже самое, стоит red hat

У меня suse linux enterprise server 10, видимо пакета нет у вас. :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ilya300
сообщение 19.6.2007, 1:44
Сообщение #12


Стаж: 10 лет

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

мандрива 10 (вроде как))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sobig
сообщение 20.6.2007, 5:42
Сообщение #13


Стаж: 10 лет

Сообщений: 334
Благодарностей: 87
Полезность: 224

Код
#!/bin/bash
# Copyright (c) 2007 Omega Sector.  All rights reserved.
#
# Author: Stanislav Batnikov <[email protected]>
#
# /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
Сообщение #14
Стаж: 10 лет

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

спасибо за скрипт всё отлично

Отредактировал: zveryga, - 8.9.2007, 12:09
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Xp0Huk
сообщение 20.8.2008, 11:09
Сообщение #15


Стаж: 10 лет

Сообщений: 123
Благодарностей: 18
Полезность: 120

Sobig помоги запуском я новичек в линукс, у меня ubuntu-8.04-desktop-i386
я скачал mc через Synaptic но незнаю как ево запустить
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Hooligan Crapy4ino
сообщение 20.8.2008, 14:57
Сообщение #16


Стаж: 9 лет

Сообщений: 386
Благодарностей: 103
Полезность: 516

Sobig
не по теме ... а как можно тоже самое в windows xp сделать????
если не сложно ссылочку кинь иль обьясни как нибудь)))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя bravo
сообщение 20.8.2008, 16:58
Сообщение #17


Стаж: 10 лет

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

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

Xp0Huk в конесоле команда mc - если у тебя стоят иксы (визуальное оформление) то можно в менюшках поискать, куда он там упал.


Hooligan Crapy4ino вопрос интересный... наверное. но врядли. я когда то пытался. вообщем зачада найти программу которая забубенит другую программу в сервис винды. есть предположение, что врдяли оно будет правильно работать... что в винде не предназначено для такого использования, там может не получиться заставить правильно работать... да и инструметов там не оч много для этого.

Отредактировал: bravo, - 20.8.2008, 16:59
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Hooligan Crapy4ino
сообщение 20.8.2008, 19:28
Сообщение #18


Стаж: 9 лет

Сообщений: 386
Благодарностей: 103
Полезность: 516

но видь антивирусы ка то так работают????? и всякие там анти шпионы?? помоему можно как то сделать
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sobig
сообщение 21.8.2008, 18:20
Сообщение #19


Стаж: 10 лет

Сообщений: 334
Благодарностей: 87
Полезность: 224

Цитата(Hooligan Crapy4ino @ 20.8.2008, 18:57) *
Sobig
не по теме ... а как можно тоже самое в windows xp сделать????
если не сложно ссылочку кинь иль обьясни как нибудь)))

FireDaemon
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Hooligan Crapy4ino
сообщение 21.8.2008, 18:43
Сообщение #20


Стаж: 9 лет

Сообщений: 386
Благодарностей: 103
Полезность: 516

Цитата(Sobig @ 21.8.2008, 20:20) *


и че ето такое???? хатяб написал
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
4 страниц V   1 2 3 »
 
Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: