Синхронизация команд между серверами майнкрафт

Туториал Синхронизация команд между серверами майнкрафт

Думаю все кто использует BungeeCord сталкивались с проблемой синхронизация команд между серверами, да можно использовать плагин CommandSync но у меня например он сначала работает нормально но через некоторое время когда мне нужно перезагрузить какой то сервер из за CommandSync сервер не запускается и надо перезагружать BungeeCord сервер что все заработало. Именно из за этой проблемы я решил написать этот скрип так как альтернатив плагину CommandSync не нашел.
Скрипт предназначен для серверов работающих на Linux и для тех кто использует утилиту tmux/screen для запука серверов в отдельной сессии. Если вы не используете утилиту tmux/screen скрипт у вас не будет работать, чтоб узнать как установить и настроить утилиту tmux/screen для своего сервера перейдите по этой ссылке нажми.
Если у вас сервера на нескольких хостингах вы можыте настроить отправку команд по SSH
Для этого вам надо открыть скрипт cmd в блокноте и следовать инструкции описанной в скрипте.

Код:
#! /bin/sh
comands=`until [ -z "$2" ]; do echo -n "$2 " ; shift; done`
server=`echo -n $1 | sed 's/,/ /g'`

tmux_console ()
{
    serverall=`tmux ls | grep : | cut -d. -f1 | awk '{print substr($1, 0, length($1)-1)}'`
 
    if [ $server = all ] > /dev/null 2>&1
    then
        for servers in $serverall
        do
            tmux send-keys -t $servers "$comands" Enter
# Чтоб включить синхронизацию по SSH необходимо розкоментировать фунцию ниже и заменить "пользователь, пароль и ип" на ваши данные.      
# Если у вас несколько хостингов эту фунцию можно копировать и вставить неограниченное количество раз только подставлять свои данные.  
# И предварительно установить утилиту sshpass (apt-get install sshpass -y / yum install sshpass -y).
# Также нужно закинуть скрипт cmd в домашний каталог пользователя на SSH сервере например если root (/root), если user (/home/user)  
#            sshpass -p "пароль" ssh -o StrictHostKeyChecking=no пользователь@ип "sh cmd $1 $comands"
#            sshpass -p "пароль" ssh -o StrictHostKeyChecking=no пользователь@ип "sh cmd $1 $comands"
        done
    elif [ $server = shell ] > /dev/null 2>&1
    then
        $comands
    else
        for servers in $server
        do
            tmux send-keys -t $servers "$comands" Enter
#            sshpass -p "пароль" ssh -o StrictHostKeyChecking=no пользователь@ип "sh cmd $1 $comands"
#            sshpass -p "пароль" ssh -o StrictHostKeyChecking=no пользователь@ип "sh cmd $1 $comands"
        done
    fi
}
screen_console ()
{
    serverall=`screen -list | awk '{print substr($1, 0, length($1)-0)}'`

    if [ $server = all ] > /dev/null 2>&1
    then
        for servers in $serverall
        do
            screen -p 0 -S $servers -X stuff "$comands^m"
# Чтоб включить синхронизацию по SSH необходимо розкоментировать фунцию ниже и заменить "пользователь, пароль и ип" на ваши данные.      
# Если у вас несколько хостингов эту фунцию можно копировать и вставить неограниченное количество раз только подставлять свои данные.  
# И предварительно установить утилиту sshpass (apt-get install sshpass -y / yum install sshpass -y).
# Также нужно закинуть скрипт cmd в домашний каталог пользователя на SSH сервере например если root (/root), если user (/home/user).
#            sshpass -p "пароль" ssh -o StrictHostKeyChecking=no пользователь@ип "sh cmd $1 $comands"
#            sshpass -p "пароль" ssh -o StrictHostKeyChecking=no пользователь@ип "sh cmd $1 $comands"
        done
    elif [ $server = shell ] > /dev/null 2>&1
    then
        $comands
    else
        for servers in $server
        do
            screen -p 0 -S $servers -X stuff "$comands^m"  
#            sshpass -p "пароль" ssh -o StrictHostKeyChecking=no пользователь@ип "sh cmd $1 $comands"
#            sshpass -p "пароль" ssh -o StrictHostKeyChecking=no пользователь@ип "sh cmd $1 $comands"
        done
    fi
}


if [ -f ".cmd.conf" ]; then
console=`grep console .cmd.conf`
else
echo console=tmux > .cmd.conf
fi


if [ $server = screen ] > /dev/null 2>&1
then
    sed -i s/$console/console="screen"/g .cmd.conf
elif [ $server = tmux ] > /dev/null 2>&1
then
    sed -i s/$console/console="tmux"/g .cmd.conf
else
    if [ $console = console="screen" ] > /dev/null 2>&1
    then
        screen_console > /dev/null 2>&1
    else
        tmux_console > /dev/null 2>&1
    fi
fi
Команди:
/sh cmd <
названия сессии под которой работает сервер> <команда> - отправит команду на нужен вам сервер/сессию.
/sh cmd all <команда> - отправит команду на все сервера/сессии tmux/screen
/sh cmd <сервера/сессия>,<сервера/сессия>,<сервера/сессия> <команда> - отправит команду на несколько нужних вам серверов/сессий.
/sh cmd shell <команда> - отправит команду в терминал/консоль вашего хостинга .
/sh cmd tmux - нужно ввести эту команду если вы используете утилиту tmux.
/sh cmd screen -
нужно ввести эту команду если вы используете утилиту screen.

Зависимости:
Tmux / Screen
ScriptRunner



Установка:
Скачать и установить плагин ScriptRunner
Скачать скрипт и закинуть файл cmd в папку /plugins/ScriptRunner/ сервера майнкрафт

Автор
Автор
Hidens
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя Hidens