[Скрипт] Управление SRCDS | Tmux

Strangelove

Добрая душа
Сообщения
77
Реакции
35
Бегло полистал, ничего подобного не нашел.
Захотел как-то уйти от screen, использовать LGSM не позволила религия(громоздко на мой взгляд), ограничился "самописным" средством.

Менеджер сессий - tmux
Опционально - Useful Commands (ставится исключительно ради sm_exec для отправки игрокам команды retry при перезагрузке сервера.)

Bash:
#!/bin/sh
# Stefan, 2019
# Tmux based SRCDS management script

DIR="$( cd "$( dirname "$0" )" && pwd )"
tmux=$(which tmux)
SRCDS="$DIR/srcds_run" # as you may see, script must be located in the same dir with a srcds_run

# Edit these #
name="css_dm" #specifies the name of a tmux pane
MAP="cs_compound"
MAXPLAYERS=64
PORT=27015
TICK=100
FPS=500
TOKEN=your_steam_token
ADDITIONAL="+sv_voicecodec vaudio_celt +exec server.cfg +sv_setsteamaccount $token +fps_max $FPS"
starting_line="$SRCDS -condebug -console -game cstrike -maxplayers $MAXPLAYERS -port $PORT -tickrate $TICK +map $MAP $ADDITIONAL"

# Don't touch unless you know what you're doing #
tsend()
{
    $tmux send-keys -t $name "$1" Enter
}

case $1 in
    start)
    if $tmux ls | grep "$name" ; then
        echo "Pane running already: $name. Stop it first." && exit 0
    else
        echo "Starting up $name pane."
        $tmux new -d -s $name "$starting_line"
    fi
    ;;
    stop)
    if $tmux ls | grep "$name" ; then
        echo "Active $name session found. Stopping..."
        $tmux kill-session -t "$name"
    else
        echo "$name not running."
    fi
    ;;
    restart)
    if ! $tmux ls | grep "$name" ; then
        echo "$name is not running. Cannot REstart."
    else
        echo "Running session found. Initiating restart..."
        tsend "sm_exec @humans retry" #UsefulCommands by Eyal282@alliedmods.com
        sleep 0.2
        $tmux kill-session -t "$name"
        #sleep 0.5
        $tmux new -d -s $name "$starting_line"
        sleep 0.5
        if $tmux ls | grep "$name" ; then
            echo "Restart successful for pane: $name"
        else
            echo "Restart failed for pane: $name !!! Investigate manually."
        fi
    fi
    ;;
    status)
    if $tmux ls | grep "$name" ; then
        echo "Tmux pane $name is up."
    else
        echo "Tmux pane $name is down."
    fi
    ;;
    info)
    if $tmux ls | grep "$name" ; then
        #$tmux clear-history
        $tmux send-keys -t $name 'status' Enter
        sleep 0.5
        $tmux capture-pane -t $name
        $tmux show-buffer | grep -A8 hostname | head -8
    else
        echo "Tmux pane $name is not running."
    fi
    ;;
    stats)
    if $tmux ls | grep "$name" ; then
        $tmux send-keys -t $name 'stats' Enter
        sleep 0.5
        $tmux capture-pane -t $name
        $tmux show-buffer | grep -A2 Map_changes | head -2
    else
        echo "Tmux pane $name is not running."
    fi
    ;;
    restart-planned)
    if $tmux ls | grep "$name" ; then
        tsend "sm_say Reloading..."
        sleep 1
        tsend "sm_say Server is going for planned restart. You will be reconnected."
        sleep 1
        tsend "sm_say Server restarting in 30 seconds ..."
        sleep 10
        tsend "sm_say Server restarting in 20 seconds ..."
        sleep 10
        tsend "sm_say Server restarting in 10 seconds ..."
        sleep 5
        tsend "sm_say Server restarting in 5 seconds ..."
        sleep 1
        tsend "sm_say Server restarting in 4 seconds ..."
        sleep 1
        tsend "sm_say Server restarting in 3 seconds ..."
        sleep 1
        tsend "sm_say Server restarting in 2 seconds ..."
        sleep 1
        tsend "sm_say Server restarting in 1 seconds ..."
        sleep 1
        tsend "sm_exec @humans retry" #UsefulCommands by Eyal282@alliedmods.com
        sleep 0.2
        $tmux kill-session -t "$name"
        cat /dev/null > $DIR/cstrike/addons/sourcemod/Chat.log
        if ! $tmux ls | grep "$name" ; then
            $tmux new -d -s $name "$starting_line"
        fi
    else
        echo "Tmux pane $name is not running. Can't restart"
    fi
    ;;
    *)
    echo "Invalid argument! Valid arguments are: start ; stop ; restart ; restart-planned ; status ; stats ; info"
    ;;
esac

Функционал:
Запуск, остановка, перезапуск, перезапуск с таймером(отправляет внутрь окна sm_say с временными интервалами), статус сервера(up/down), вывод status из консоли сервера в shell, вывод stats из консоли сервера в shell.

Установка:
1. Создать файл server.sh с содержимым спойлера в директории с srcds_run
2. Отредактировать переменные:
name=
MAP=
MAXPLAYERS=
PORT=
TICK=
FPS=
TOKEN=
ADDITIONAL=
Не забываем, что переменная берется в кавычки, если содержит пробелы (прим. ADDITIONAL)
3. chmod 700 server.sh
4. Можно пользоваться ( ./server.sh start ; ./server.sh stop ; ./server.sh restart ; ./server.sh restart-planned ; ./server.sh status ; ./server.sh stats ; ./server.sh info )

Проверено и используется на последних версиях ubuntu, но должно работать везде.
 
Последнее редактирование:

puma133

Участник
Сообщения
33
Реакции
12
Бегло полистал, ничего подобного не нашел.
Захотел как-то уйти от screen, использовать LGSM не позволила религия(громоздко на мой взгляд), ограничился "самописным" средством.

Менеджер сессий - tmux
Опционально - Useful Commands (ставится исключительно ради sm_exec для отправки игрокам команды retry при перезагрузке сервера.)

Bash:
#!/bin/sh
# Stefan, 2019
# Tmux based SRCDS management script

DIR="$( cd "$( dirname "$0" )" && pwd )"
tmux=$(which tmux)
SRCDS="$DIR/srcds_run" # as you may see, script must be located in the same dir with a srcds_run

# Edit these #
name="css_dm" #specifies the name of a tmux pane
MAP="cs_compound"
MAXPLAYERS=64
PORT=27015
TICK=100
FPS=500
TOKEN=your_steam_token
ADDITIONAL="+sv_voicecodec vaudio_celt +exec server.cfg +sv_setsteamaccount $token +fps_max $FPS"
starting_line="$SRCDS -condebug -console -game cstrike -maxplayers $MAXPLAYERS -port $PORT -tickrate $TICK +map $MAP $ADDITIONAL"

# Don't touch unless you know what you're doing #
tsend()
{
    $tmux send-keys -t $name "$1" Enter
}

case $1 in
    start)
    if $tmux ls | grep "$name" ; then
        echo "Pane running already: $name. Stop it first." && exit 0
    else
        echo "Starting up $name pane."
        $tmux new -d -s $name "$starting_line"
    fi
    ;;
    stop)
    if $tmux ls | grep "$name" ; then
        echo "Active $name session found. Stopping..."
        $tmux kill-session -t "$name"
    else
        echo "$name not running."
    fi
    ;;
    restart)
    if ! $tmux ls | grep "$name" ; then
        echo "$name is not running. Cannot REstart."
    else
        echo "Running session found. Initiating restart..."
        tsend "sm_exec @humans retry" #UsefulCommands by Eyal282@alliedmods.com
        sleep 0.2
        $tmux kill-session -t "$name"
        #sleep 0.5
        $tmux new -d -s $name "$starting_line"
        sleep 0.5
        if $tmux ls | grep "$name" ; then
            echo "Restart successful for pane: $name"
        else
            echo "Restart failed for pane: $name !!! Investigate manually."
        fi
    fi
    ;;
    status)
    if $tmux ls | grep "$name" ; then
        echo "Tmux pane $name is up."
    else
        echo "Tmux pane $name is down."
    fi
    ;;
    info)
    if $tmux ls | grep "$name" ; then
        #$tmux clear-history
        $tmux send-keys -t $name 'status' Enter
        sleep 0.5
        $tmux capture-pane -t $name
        $tmux show-buffer | grep -A8 hostname | head -8
    else
        echo "Tmux pane $name is not running."
    fi
    ;;
    stats)
    if $tmux ls | grep "$name" ; then
        $tmux send-keys -t $name 'stats' Enter
        sleep 0.5
        $tmux capture-pane -t $name
        $tmux show-buffer | grep -A2 Map_changes | head -2
    else
        echo "Tmux pane $name is not running."
    fi
    ;;
    restart-planned)
    if $tmux ls | grep "$name" ; then
        tsend "sm_say Reloading..."
        sleep 1
        tsend "sm_say Server is going for planned restart. You will be reconnected."
        sleep 1
        tsend "sm_say Server restarting in 30 seconds ..."
        sleep 10
        tsend "sm_say Server restarting in 20 seconds ..."
        sleep 10
        tsend "sm_say Server restarting in 10 seconds ..."
        sleep 5
        tsend "sm_say Server restarting in 5 seconds ..."
        sleep 1
        tsend "sm_say Server restarting in 4 seconds ..."
        sleep 1
        tsend "sm_say Server restarting in 3 seconds ..."
        sleep 1
        tsend "sm_say Server restarting in 2 seconds ..."
        sleep 1
        tsend "sm_say Server restarting in 1 seconds ..."
        sleep 1
        tsend "sm_exec @humans retry" #UsefulCommands by Eyal282@alliedmods.com
        sleep 0.2
        $tmux kill-session -t "$name"
        cat /dev/null > $DIR/cstrike/addons/sourcemod/Chat.log
        if ! $tmux ls | grep "$name" ; then
            $tmux new -d -s $name "$starting_line"
        fi
    else
        echo "Tmux pane $name is not running. Can't restart"
    fi
    ;;
    *)
    echo "Invalid argument! Valid arguments are: start ; stop ; restart ; restart-planned ; status ; stats ; info"
    ;;
esac

Функционал:
Запуск, остановка, перезапуск, перезапуск с таймером(отправляет внутрь окна sm_say с временными интервалами), статус сервера(up/down), вывод status из консоли сервера в shell, вывод stats из консоли сервера в shell.

Установка:
1. Создать файл server.sh с содержимым спойлера в директории с srcds_run
2. Отредактировать переменные:
name=
MAP=
MAXPLAYERS=
PORT=
TICK=
FPS=
TOKEN=
ADDITIONAL=
Не забываем, что переменная берется в кавычки, если содержит пробелы (прим. ADDITIONAL)
3. chmod 700 server.sh
4. Можно пользоваться ( ./server.sh start ; ./server.sh stop ; ./server.sh restart ; ./server.sh restart-planned ; ./server.sh status ; ./server.sh stats ; ./server.sh info )

Проверено и используется на последних версиях ubuntu, но должно работать везде.
no server running on /tmp/tmux-1000/default
не работает
 

Strangelove

Добрая душа
Сообщения
77
Реакции
35
no server running on /tmp/tmux-1000/default
не работает
Очень неинформативно.

Что за ОС?

На каком этапе ошибка стрельнула?

Сессия создалась или нет? (# tmux ls)

А что возвращает запуск с дебагом?
# bash -x server.sh start

P.S. Проверил на чистой 22й убунте, полет нормальный.
 

puma133

Участник
Сообщения
33
Реакции
12
Очень неинформативно.

Что за ОС?

На каком этапе ошибка стрельнула?

Сессия создалась или нет? (# tmux ls)

А что возвращает запуск с дебагом?
# bash -x server.sh start

P.S. Проверил на чистой 22й убунте, полет нормальный.
Проверял на ubuntu 22. Создаю сессию через tmux сначала, а потом ввожу команду.
Сесия не создаеться, сервер не стартует


Bash:
ins@vds-52661:~/insurgency$ bash -x server.sh start
+ export 'LD_LIBRARY_PATH=/home/ins/insurgency:/home/ins/insurgency/bin:{/home/ins/insurgency:/home/ins/insurgency/bin:{}}'
+ LD_LIBRARY_PATH='/home/ins/insurgency:/home/ins/insurgency/bin:{/home/ins/insurgency:/home/ins/insurgency/bin:{}}'
+++ dirname server.sh
++ cd .
++ pwd
+ DIR=/home/ins/insurgency
++ which tmux
+ tmux=/usr/bin/tmux
+ SRCDS=/home/ins/insurgency/srcds_linux
+ name=ins_server
+ MAP='sinjar push'
+ MAXPLAYERS=48
+ PORT=27015
+ TICK=64
+ FPS=500
+ TOKEN=
+ ADDITIONAL='-workshop +sv_setsteamaccount '
+ starting_line='/home/ins/insurgency/srcds_linux -game insurgency -maxplayers 48 -port 27015 -tickrate 64 +map sinjar push -workshop +sv_setsteamaccount '
+ case $1 in
+ grep ins_server
+ /usr/bin/tmux ls
+ echo 'Starting up ins_server pane.'
Starting up ins_server pane.
+ /usr/bin/tmux new -d -s ins_server '/home/ins/insurgency/srcds_linux -game insurgency -maxplayers 48 -port 27015 -tickrate 64 +map sinjar push -workshop +sv_setsteamaccount '
ins@vds-52661:~/insurgency$
 
Последнее редактирование:

Strangelove

Добрая душа
Сообщения
77
Реакции
35
В переменных ADDITIONAL и starting_line необходимо заменить одинарные кавычки на двойные. Т.е. вместо:
C-подобный:
ADDITIONAL='-workshop +sv_setsteamaccount '
starting_line='$SRCDS -game insurgency -maxplayers 48 -port 27015 -tickrate 64 +map sinjar push -workshop +sv_setsteamaccount '
сделать так:
C-подобный:
ADDITIONAL="-workshop +sv_setsteamaccount"
starting_line="$SRCDS -game insurgency -maxplayers 48 -port 27015 -tickrate 64 +map sinjar push -workshop +sv_setsteamaccount"

Так же не совсем понятно зачем пробел в конце переменных, но это не критично.
Если тоже нет, то руками создает?

/usr/bin/tmux new -d -s ins_server '/home/ins/insurgency/srcds_linux -game insurgency -maxplayers 48 -port 27015 -tickrate 64 +map sinjar push -workshop +sv_setsteamaccount '
 
Последнее редактирование:

puma133

Участник
Сообщения
33
Реакции
12
Так же не совсем понятно зачем пробел в конце переменных, но это не критично.
там не проблем, я просто убрал ключи. У меня и стоят такие кавычки, это сюда так скопировалось
 
Последнее редактирование:
Сверху Снизу