(fwd) Re: Проблемы с Кваком

Andrey Gerzhov (kittle@freeland.alex-ua.com)
Mon, 18 Jan 1999 14:04:36 +0200 (EET)

-- forwarded message --
Newsgroups: fido7.ru.unix
Distribution: fido7
X-Comment-To: Dmitry Lyzin
Approved: gateway@fido7.ru
From: Victor Wagner <Victor.Wagner@p27.f219.n5020.z2.fidonet.org>
Date: Sat, 16 Jan 99 01:12:07 +0300
Subject: Re: Проблемы с Кваком
Message-ID: <77oefn$am5$1@wagner.wagner.home>
References: <1331467392@p2.f1613.n5020.z2.fidonet.ftn>
Organization: Wagner's home
X-FTN-AREA: RU.UNIX
X-FTN-MSGID: wagner.wagner.home 4db4e1d0
X-FTN-REPLY: 2:5020/1613.2@fidonet 4f5c9480
Sender: vitus@wagner.wagner.home
NNTP-Posting-Host: localhost
X-FTN-Tearline: ifmail v.2.14.os-p2
X-FTN-Origin: Wagner's home (2:5020/219.27@fidonet)
X-FTN-SEEN-BY: 50/993 463/68 159 464/34 4614/1 4615/21 4631/13 4635/4 5001/15 17
X-FTN-SEEN-BY: 5002/16 5003/15 5011/13 201 5020/37 68 69 78 114 157 204 214 215
X-FTN-SEEN-BY: 5020/219 238 241 290 293 322 400 423 427 443 462 509 620 642 644
X-FTN-SEEN-BY: 5020/672 741 876 1381 1851 2200 11400 5022/5 5023/1 11 5025/2
X-FTN-SEEN-BY: 5027/16 5028/51 5030/23 251 568 818 5049/256 5054/3 5058/24 5059/2
X-FTN-SEEN-BY: 5061/15 5065/10 5066/2 5067/5 5075/10 5077/3 28 5080/80 5084/10
X-FTN-SEEN-BY: 5094/5094
X-FTN-PATH: 5020/219 114 509 1851 238
X-FTN-PATH: 5020/400
Lines: 83
Path: freeland.alex-ua.com!routki.ki.yurteh.net!carrier.kiev.ua!botik.lucky.net!news.planetc.com!leto.backbone.ou.edu!hammer.uoregon.edu!newshub.northeast.verio.net!newsfeed.gamma.ru!Gamma.RU!ddt.demos.su!f400.n5020!f238.n5020!f1851.n5020!f509.n5020!f114.n5020!f219.n5020!wagner!not-for-mail
Xref: freeland.alex-ua.com fido7.ru.unix:2219

Dmitry Lyzin <Dmitry_Lyzin@p2.f1613.n5020.z2.fidonet.org> wrote:
DL> Hello All,

DL> Решил я у себя Quake-сервер все время держать запущенным, да вот проблема
-
DL> много процессорного времени он жрет. Тогда я придумал - запускать
Quake-сервер с
DL> низким приоритетом и написать скрипт который смотрит, что Quake-сервер на
DL> стандартный выход выдает, отлавливает момент когда в него игруны полезли и
DL> повышает его приоритет и, соответствено, когда из него все игруны повылезли
-
DL> понижает его приоритет обратно.
DL> Hе получилось... Quake, вонючка, когда его стандартный вывод на что-нибудь
DL> кроме /dev/tty* направляешь (ну, в файл, через конвеер в другую прогу,
итд),
DL> ничего туда писать не хочет! Как бы его все таки обмануть?

Так на то expect есть.

#!/usr/bin/expect
spawn quake-server
exec renice -20 -p -p [exp_pid]
while {1} {
expect {
"player connected" {
exec renice +20 -p [exp_pid]
}
"no more players" {
exec renice -20 -p [exp_pid]
}
eof {
# Сервер упал
spawn quake-server
exec renice -20 -p [exp_pid]
}
}

Внимание - имена программ и сообщения, написаны от фонаря. quake server
я в глаза не видел и видеть не хочу.

DL> Тут появилась другая идея - Quake-сервер с помощью inetd запускать! Я все,
DL> вроде, правильно настроил. И - нифига! Hе может inetd Quake запустить! Он
его
DL> запускает, запускает,... а он не запускается! Как-же Quake правильно в
DL> inetd.conf правильно вписать?

Полагаю, что никак. Quake хочет с сокетами напрямую работать, а inetd .
запускает сервер, передавая ему открытый сокет как stdin/stdout

DL> Тут появилась совсем крутая идея, правда, с учетом предистории, совсем
DL> непонятно, как ее осуществить.
DL> Итак, Quake-сервер постоянно находиться в загруженном, но остановленном
DL> состаянии. В смысле, не дают ему процессор вообще! Чтоб процессорное время
не
DL> жрал. Кстати, как это сделять?

kill -STOP `pidof quake-server`

DL> Когда к Quake-серверу кто-нибудь обращается, inetd запускает скриптик или
DL> выполняет какую-то (какую?) команду, которая разрешает Quake-серверу

kill -CONT `pidof quakeserver`

DL> выполняться. Другой скрипт следит за выводом Quake-сервера, отлавливает
момент

Только вот это ничему не поможет, поелику игрок будет приконнекчен к
inetd а не к quakeserver. Разве что оный скрипт будет сам коннектиться к
серверу и свой stdin/stdout ему форвардить.

DL> когда из него все игруны повылазили и отбирает у него процессор.

Если идти таким путем, то у каждого юзера будет свой экземляр, скажем так,
quake-proxy. И считать юзеров проще всего посредством семафора.
Каждая копия при входе смотрит на этот семафор. Если он 0, она его
взводит в 1 и шлет SIGCONT. Если не ноль, то просто увеличивает.
При выходе она его уменьшает, и если он стал 0, шлет SIGSTOP.
Только, вот с expect явно проще.

-- 
--------------------------------------------------------
I have tin news and pine mail...
Victor Wagner @ home       =         vitus@wagner.rinet.ru 
-- end of forwarded message --

-- 
С тем, что не помешает никогда,
                                               Kittle