#!/bin/sh # Скрипт для подключению к экрану игрового сервера # Если запускать скрипт scr, первым параметром всегда должно быть название # стартового скрипта игрового сервера (т.е. scr quake3 ..., scr hlds ... и т.д.) # Если же сделать линк на этот скрипт с названием соответствующего сервера # (т.е. ln -s scr hlds; ln -s scr quake3 и так далее), то в первом параметре # нет нужды. # # Все остальные параметры передаются команде screen, то есть можно воодить # команды scr hlds -ls (покажет список экранов), scr hlds -r cstrike # (переключиться на экран сервера cstrike; кстати если сервер имеет только # один процесс, т.е. GAME_SERVERS содержит всего один элемент, то имя сервера # указывать необязательно - достаточно опции -r) и так далее. # Первым делом выясним для работы с каким сервером нас вызвали. SERVICE=`basename $0` if [ ! -e /etc/init.d/$SERVICE ]; then SERVICE=$1 shift if [ ! -e /etc/init.d/$SERVICE ]; then echo "Не задано имя сервера!" exit 1 fi fi if [ "$SERVICE" == "rtorrent" ]; then stty stop undef stty start undef fi # Найдем регистрационную запись, под которой запускается сервер eval `grep "GAME_USER" /etc/init.d/$SERVICE` if [ -z "$GAME_USER" ]; then echo "В стартовом скрипте сервера не найдена переменная GAME_USER!" exit 1 fi # Выясним первичную группу сервера GROUP=`id -gn $GAME_USER` # Выставим на текущую консоль нужные права, иначе screen из-под # другой регистрационной записи не сможет работать tty=`tty` OLD_MOD=`stat -c "%a" $tty` OLD_GRP=`stat -c "%g" $tty` if ! chown :$GROUP $tty; then echo "Не удалось установить группу устройства $tty в $GROUP" exit 1 fi chmod g+rw $tty sudo -H -u $GAME_USER screen $* chmod $OLD_MOD $tty chown :$OLD_GRP $tty if [ "$SERVICE" == "rtorrent" ]; then stty stop ^s stty start ^q fi