Скрипт запуска игрового сервера - проблемка

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Pez!
старшина
Сообщения: 436
Зарегистрирован: 2008-01-13 20:02:24
Откуда: москва матушка

Скрипт запуска игрового сервера - проблемка

Непрочитанное сообщение Pez! » 2009-04-10 15:43:58

Здравствуйте, собственно проблема в следующем - есть игровой сервер css, который управляется следующим скриптом:

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

steam# cat server_27015
#!/bin/sh

DEDSERVER='Source dedicated server'
LONGNAME='Counter-Strike Source'
WORKDIR='/usr/games/css_steam27015'
DAEMON='./srcds_run'

IP='77.94.175.70'
PORT='27015'
MAP='cs_office'
TICK='100'
SIZE='26'
GAME='cstrike'
NAME='css'
CONFIG='server.cfg'
FPS_MAX='600'
SV_LAN='0'
LOG='on'


OPTIONS="-game cstrike +ip $IP -port $PORT +map $MAP -tickrate $TICK +log $LOG +maxplayers $SIZE +sv_lan $SV_LAN +exec $CONFIG -norestart -secure -pidfile $WORKDIR/$GAME/$NAME.pid"

service_start(){
        if [ ! -f $WORKDIR/$GAME/$NAME.pid ]; then
        echo "Starting $DEDSERVER - $LONGNAME"
        echo "Server IP: $IP"
        echo "Server port: $PORT"
        echo "Server size: $SIZE players"
        cd $WORKDIR
        su css_steam27015 $DAEMON $OPTIONS >> css_server.log 2>&1 &
        sleep 5
        ps -aux |grep $GAME |grep $PORT |awk '{ print $2}' >> $WORKDIR/$GAME/$NAME.pid
        echo "$LONGNAME server process ID written to $STEAM/$GAME/$NAME.pid"
        echo "$DEDSERVER started"
        else
        echo "$DEDSERVER - $LONGNAME already running"
        fi
}
service_stop(){
        if [ -f $WORKDIR/$GAME/$NAME.pid ]; then
        echo "Stoping $DEDSERVER - $LONGNAME"
        for id in `cat $WORKDIR/$GAME/$NAME.pid`
        do kill -9 $id
            echo "Killing process ID $id"
            echo "Removing $LONGNAME server pid file"
            rm -rf $WORKDIR/$GAME/$NAME.pid
            break
        done
        echo "$LONGNAME server stopped."
    else
        echo "Cannot stop $LONGNAME server.  Server is not running."
    fi
}

case "$1" in
    'start')
        service_start
        ;;
    'stop')
        service_stop
        ;;
    'restart')
        service_stop
        sleep 1
        service_start
        ;;
    *)
        echo "Usage $0 start|stop|restart"
esac
Так вот конструкция запуска отрабатывает идеально, а с остановкой проблема. В пид файл записываются два пида, а убивается только первый... Как можно побороть ?
Всёравно все умрут, какая разница....и только серваки с фряхой будут работать ещё некоторое время после.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скрипт запуска игрового сервера - проблемка

Непрочитанное сообщение zg » 2009-04-10 16:10:59

Pez! писал(а):а убивается только первый...
и не мудрено :smile:
Pez! писал(а):rm -rf $WORKDIR/$GAME/$NAME.pid
break
вынеси за пределы цикла удаление файла, а break закомментируй

Аватара пользователя
Pez!
старшина
Сообщения: 436
Зарегистрирован: 2008-01-13 20:02:24
Откуда: москва матушка

Re: Скрипт запуска игрового сервера - проблемка

Непрочитанное сообщение Pez! » 2009-04-10 16:55:49

А, понял, спасибо )
Всёравно все умрут, какая разница....и только серваки с фряхой будут работать ещё некоторое время после.