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