Думаю все кто использует BungeeCord сталкивались с проблемой синхронизация команд между серверами, да можно использовать плагин CommandSync но у меня например он сначала работает нормально но через некоторое время когда мне нужно перезагрузить какой то сервер из за CommandSync сервер не запускается и надо перезагружать BungeeCord сервер что все заработало. Именно из за этой проблемы я решил написать этот скрип так как альтернатив плагину CommandSync не нашел.
Скрипт предназначен для серверов работающих на Linux и для тех кто использует утилиту tmux/screen для запука серверов в отдельной сессии. Если вы не используете утилиту tmux/screen скрипт у вас не будет работать, чтоб узнать как установить и настроить утилиту tmux/screen для своего сервера перейдите по этой ссылке нажми.
Если у вас сервера на нескольких хостингах вы можыте настроить отправку команд по SSH
Для этого вам надо открыть скрипт cmd в блокноте и следовать инструкции описанной в скрипте.
Скрипт предназначен для серверов работающих на Linux и для тех кто использует утилиту tmux/screen для запука серверов в отдельной сессии. Если вы не используете утилиту tmux/screen скрипт у вас не будет работать, чтоб узнать как установить и настроить утилиту tmux/screen для своего сервера перейдите по этой ссылке нажми.
Если у вас сервера на нескольких хостингах вы можыте настроить отправку команд по SSH
Для этого вам надо открыть скрипт cmd в блокноте и следовать инструкции описанной в скрипте.
JavaScript:
#! /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
BungeeRunSH - для bungeecord
ScriptRunner - для spigot/paper
Установка:
Скачать и установить плагин BungeeRunSH/ScriptRunner
Скачать скрипт и закинуть файл cmd в папку /plugins/BungeeRunSH/ для сервера BungeeCord
Скачать скрипт и закинуть файл cmd в папку /plugins/ScriptRunner/ для сервера spigot/paper
Если вы установили скрипт на BungeeCord через плагин BungeeRunSH вам нет необходимости устанавливать плагин ScriptRunner на все сервера. Но если у вас есть необходимость выполнить команду от консоли сервера spigot/paper тогда вам нужно на сервер установить ScriptRunner
Мой сервер: mc.fora.co.ua