вопрос по bash (нужна помощь в дописании скрипта)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
big
Сообщения: 38
ОС: Arch Current

вопрос по bash

Сообщение big »

здравствуйте. есть проблема
в скрипте cstart и hstart запускают один и тот же бинарник (hlds_amd), просто с разными параметрами
и если они оба запущены, то cstop или hstop убивают рандомно один из них
а надо, чтоб hstop убивал процесс, порожденный hstart и cstop убивал процесс, порожденный cstart соответственно
надо как-то их разделять. возможно по pid, но как это сделать - не знаю. кто-нибудь может помочь?

Код: Выделить всё

#!/bin/bash

qstart()
{
cd /games/q3
./q3ded +cvar_restart +set com_hunkmegs 32 +set net_port 27960 +set port 27960 +set net_ip 14.14.7.10 +set dedicated 1 +set vm_game 2 +set vm_cgame 2 +set vm_ui 2 +set sv_strictAuth 0 +set sv_punkbuster 0 +set sv_lanForceRate 1 +set sv_maxrate 15000 +set sv_maxclients 12 +set fraglimit 0 +set timelimit 20 +set sv_hostname PerevalNET +set sv_pure 0 +map q3dm6 +exec server.cfg >&/dev/null &
}

qstop()
{
killall q3ded
}

cstart()
{
cd /games/hlds
./cs_run -game "cstrike" -port 27015 +ip 14.14.7.10 +map de_dust +sv_lan 1 +maxplayers 20 >&/dev/null &
}

cstop()
{
killall cs_run
killall hlds_amd
}

hstart()
{
cd /games/hlds
./hl_run -game valve -port 27016 +ip 14.14.7.10 +map crossfire +sv_lan 1 +maxplayers 10 >&/dev/null &
}

hstop()
{
killall hl_run
killall hlds_amd
}

case "$1" in
q3start)
echo "Starting q3 server: q3ded"
qstart
;;
q3stop)
echo "Stopping q3 server: q3ded"
qstop
;;
csstart)
echo "Starting CS server: cs_run"
cstart
;;
csstop)
echo "Stopping CS server: cs_run"
cstop
;;
hlstart)
echo "Starting HL server: hl_run"
hstart
;;
hlstop)
echo "Stopping HL server: hl_run"
hstop
;;
*)
echo "Usage: q3start|q3stop|csstart|csstop|hlstart|hlstop "
exit 1
;;
esac
exit 0
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: вопрос по bash

Сообщение ZyX »

big писал(а):
09.07.2010 20:24
здравствуйте. есть проблема
в скрипте cstart и hstart запускают один и тот же бинарник (hlds_amd), просто с разными параметрами
и если они оба запущены, то cstop или hstop убивают рандомно один из них
а надо, чтоб hstop убивал процесс, порожденный hstart и cstop убивал процесс, порожденный cstart соответственно
надо как-то их разделять. возможно по pid, но как это сделать - не знаю. кто-нибудь может помочь?

После того, как вы написали command &, PID запущенной в фоне команды оказывается в переменной $!. Сохраните её значение в файл (echo $! > ~/.run/cstart.pid), затем просто используйте kill $(cat ~/.run/cstart.pid) # ; rm ~/.run/cstart.pid.
Спасибо сказали:
Аватара пользователя
big
Сообщения: 38
ОС: Arch Current

Re: вопрос по bash

Сообщение big »

ZyX
Огромное спасибо за помощь, все прекрасно работает.
Спасибо сказали: