flip:games:script_minecraft
Скрипты Minecraft
Управление сервером Debian/Ubuntu
nano server.sh
#!/bin/bash #------------------------------------------------------------------------------ # Управление сервером Minecraft # Версия 1.3 # Автор: FLIP (ArtShefer) # # Разреши скрипту исполняться: # chmod +x server.sh # # Вызвать справку: # ./server.sh help #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # Конфигурация #------------------------------------------------------------------------------ # Индивидуальное имя для проекта name="mc" # Минимальный объем оперативной памяти (G - Гбайт) min="1G" # Максимальный объем оперативной памяти (G - Гбайт) max="2G" # Имя ядра сервера #core="server.jar" core="server.jar" # Полный путь к каталогу с сервером #path="/home/user/servermc" path="/home/user/servermc" # Путь к java #java="/usr/bin/java" java="/usr/bin/java" # Параметры java #javaopt="-server -Dfile.encoding=UTF-8" javaopt="-server -Dfile.encoding=UTF-8" # Параметры ядра #coreopt="--nogui" coreopt="--nogui" # Имя для screen (используется индивидуальное имя проекта) #screen="mc" screen=$name # Полный путь к каталогу для бекапов #bakpath="/home/user/backup" bakpath="/home/user/backup" # Префикс для бекапа (используется индивидуальное имя проекта) #bakname="mc" bakname=$name # Удаление бекапов старее указанных дней baktime=7 # Имя для службы (используется индивидуальное имя проекта) # Для установки в /etc/systemd/system # Так же для службы используется данный скрипт # После переименовании скрипта, потребуется переустановка службы #service="mc-daemon" service="$name-daemon" #------------------------------------------------------------------------------ # Ядро #------------------------------------------------------------------------------ scriptHelp() { echo "" echo "Использование: $0 [Параметр] ..." echo "Перед запуском сервера необходимо запустить проверки:" echo " $0 test" echo "" echo "Параметры запуска:" echo " help - показать эту справку" echo " test - запустить проверки" echo " start - запустить сервер" echo " stop - остановить сервер" echo " restart - перезагрузить сервер" echo " status - статус сервера" echo " backup - создать бекап сервера" echo "" echo " save - сохранить мир (save-all)" echo " say сообщение - сказать от имени сервера (say)" echo " me сообщение - сказать от имени сервера (me)" echo " cmd команда - передать команду серверу" echo "" echo "Параметры запуска требующие пароль суперпользователя (ROOT):" echo " install - установка службы (демона)" echo " remove - удаление службы (демона)" echo " reinstall - переустановка службы (демона)" echo "" echo "СЛУЖБА" echo " Установка службы для сервера, позволит запускать сервер автоматически" echo " при старте системы без добавления в cron, а так же позволит" echo " безопасно завершить работу сервера при выключении/перезагрузки системы" echo " Будет доступно управление через systemctl, служба $service" echo "" echo "БЕКАП" echo " Сделать бекап можно только при выключенном сервере" echo " Если во время запуска бекапа был запущен сервер, он его остановит" echo " и запустит после завершения работы. При этом предупредит игроков о" echo " перезагрузке сервера, за минуту до начала выполнения резервной копии" echo "" echo " майнкрафт для мальчиков, факторка для мужиков" } daemonpath="/etc/systemd/system/$service.service" mineCMD() { /usr/bin/screen -p 0 -S $screen -X stuff "$*\n" } checkServer() { if [ $(/usr/bin/screen -ls | grep ".$screen"$'\t' | wc -l) -eq 1 ]; then return 1 else return 0 fi } checkScreen() { if [ -f "/usr/bin/screen" ]; then return 1 else return 0 fi } checkJava() { if [ -f $java ]; then return 1 else return 0 fi } checkCore() { if [ -f $path/$core ]; then return 1 else return 0 fi } checkBackup() { if [ -d $bakpath ]; then return 1 else return 0 fi } checkService() { if [ -f $daemonpath ]; then return 1 else return 0 fi } checkEula() { if [ -f $path/eula.txt ]; then if [ $(cat $path/eula.txt | grep eula=true | wc -l) -eq 1 ]; then return 0 else return 1 fi else return 0 fi } scriptTest() { checkScreen if [ $? -eq 1 ]; then echo "+ screen установлен" else echo "- Программа screen не установлена" echo " Подсказка для установки:" echo " # apt-get install screen" fi checkJava if [ $? -eq 1 ]; then echo "+ java установлена" else echo "- Программа java не установлена" echo " Подсказка для установки:" echo " # apt-get install default-jdk" fi checkCore if [ $? -eq 1 ]; then echo "+ Ядро сервера найдено" else echo "- Ядро сервера не найдено" echo " Подсказка:" echo " Настрой скрипт и/или проверь наличие ядра в каталоге" fi checkBackup if [ $? -eq 1 ]; then echo "+ Каталог для бекапов найден" else echo "- Не найден каталог для бекапов (не обязательно)" echo " Подсказка:" echo " Настрой скрипт и/или проверь наличие каталога" fi checkService if [ $? -eq 1 ]; then echo "+ Служба сервера найдена $service" else echo "- Служба сервера не найдена (не обязательно)" echo " Подсказка для установки:" echo " Запусти скрипт с параметром install" fi } scriptMsgRestart() { mineCMD "say Перезагрузка сервера через минуту!" sleep 30 mineCMD "say Перезагрузка сервера через 30 секунд!" sleep 20 mineCMD "say Перезагрузка сервера через 10 секунд!" sleep 5 mineCMD "say Перезагрузка сервера через 5 секунд!" sleep 1 mineCMD "say Перезагрузка сервера через 4 секунды!" sleep 1 mineCMD "say Перезагрузка сервера через 3 секунды!" sleep 1 mineCMD "say Перезагрузка сервера через 2 секунды!" sleep 1 mineCMD "say Перезагрузка сервера через 1 секунду!" sleep 1 } scriptBackup() { checkBackup if [ $? -eq 1 ]; then checkServer if [ $? -eq 1 ]; then serverRun=1 scriptMsgRestart mineStop sleep 1 else serverRun=0 fi find $bakpath -name "*.tar.gz" -type f -mtime $baktime -delete backupname=$bakname"_backup_"$(date +'%Y-%m-%d-%H%M%S')".tar.gz" tar cfvz $bakpath/$backupname $path/ if [ $serverRun -eq 1 ]; then mineStart fi else echo "Не найден каталог для бекапов" echo "Запусти тест:" echo "$0 test" fi } scriptRoot() { if [ $(groups $USER | grep sudo | wc -l) -eq 1 ]; then sudo $0 $* else su root -c "$0 $*" fi } mineStart() { checkEula if [ $? -eq 1 ]; then echo "Необходимо принять лицензионное соглашение Eula" echo "В фале eula.txt замени false на true" fi echo "cd" $path "&&" $java -Xms$min -Xmx$max $javaopt -jar $path/$core $coreopt cd $path && /usr/bin/screen -dmS $screen $java -Xms$min -Xmx$max $javaopt -jar $path/$core $coreopt } mineStartDaemon() { sleep 5 mineStart } mineSave() { mineCMD "save-all" } mineStop() { mineCMD "stop" checkServer while [ $? -eq 1 ] do checkServer done } mineRestart() { scriptMsgRestart mineStop sleep 1 mineStart } mineStatus() { checkServer if [ $? -eq 1 ]; then echo "Сервер запущен" else echo "Сервер не запущен" fi } mineSay() { mineCMD $* } mineMe() { mineCMD $* } runUser() { if [ -n "$1" ] then case $1 in help) scriptHelp ;; test) scriptTest ;; start) mineStart ;; start-daemon) mineStartDaemon ;; stop) mineStop ;; restart) mineRestart ;; status) mineStatus ;; install) scriptRoot install $USER ;; remove) scriptRoot remove ;; backup) scriptBackup ;; save) mineSave ;; say) mineSay $* ;; me) mineMe $* ;; cmd) cmd=$* mineCMD ${cmd:4} ;; *) echo "Ты ошибся приятель!" scriptHelp ;; esac else echo Запусти: $0 help fi } daemonWrite() { echo $* >> $daemonpath } daemonInstall() { if [[ $2 == "" ]];then echo "Запусти команду от пользователя" else checkService if [ $? -eq 1 ]; then echo "Служба сервера уже существует $service" else scriptserver=$( realpath $0 ) daemonWrite "[Unit]" daemonWrite "Description=Minecraft Server $name" daemonWrite "After=network.target" daemonWrite "" daemonWrite "[Service]" daemonWrite "Type=oneshot" daemonWrite "RemainAfterExit=yes" daemonWrite "User=$2" daemonWrite "Restart=no" daemonWrite "ExecStart=$scriptserver start-daemon" daemonWrite "ExecStop=$scriptserver stop" daemonWrite "" daemonWrite "[Install]" daemonWrite "WantedBy=multi-user.target" daemonWrite "" systemctl daemon-reload systemctl enable $service.service echo "Служба $service установлена" fi fi } daemonRemove() { checkService if [ $? -eq 1 ]; then systemctl disable $service.service rm $daemonpath systemctl daemon-reload echo "Служба $service удалена" else echo "Служба $service не существует" fi } runRoot() { if [ -n "$1" ] then case $1 in install) daemonInstall $* ;; remove) daemonRemove ;; reinstall) daemonRemove daemonInstall $* ;; *) echo "Ты ошибся приятель!" scriptHelp ;; esac fi } if [[ $EUID -ne 0 ]]; then runUser $* else runRoot $* fi
flip/games/script_minecraft.txt · Последнее изменение: 2025/02/14 08:12 — flip