1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Совет Управление сервером minecraft с Ubuntu Server

Тема в разделе "Управление сервером Bukkit", создана пользователем twixi007, 27 авг 2015.

  1. Автор темы
    twixi007

    twixi007 Старожил Пользователь

    Баллы:
    123
    Вижу тут многие какими-то кустарными методами запускают/останавливают свой сервер.
    Вот предлагаю вам то, чем я сам пользуюсь на Ubuntu Server 14.04.3.
    Оригинал
    ___________________
    Перед настройкой нужно установить Screen
    Код:
    sudo apt-get install screen
    и если нету, для удобства wget
    Код:
    sudo apt-get install wget
    ___________________
    Загрузка и настройка:
    Выполняете команду
    Код:
    wget -O minecraft "http://minecraft.gamepedia.com/Tutorials/Server_startup_script/Script?action=raw"
    (редактировать sudo nano /etc/init.d/minecraft)
    #!/bin/bash
    # /etc/init.d/minecraft
    # version 0.4.1 2015-05-07 (YYYY-MM-DD)
    #
    ### BEGIN INIT INFO
    # Provides: minecraft
    # Required-Start: $local_fs $remote_fs screen-cleanup
    # Required-Stop: $local_fs $remote_fs
    # Should-Start: $network
    # Should-Stop: $network
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Minecraft server
    # Description: Starts the minecraft server
    ### END INIT INFO

    #Settings
    SERVICE='craftbukkit.jar - название вашего ядра в папке сервера'
    SCREENNAME='minecraft_server'
    OPTIONS='nogui'
    USERNAME='minecraft - имя пользователя от кого будет выполняться, лучше создать отдельного'
    WORLD='world - название вашего основного мира в папке сервера'
    MCPATH='/home/minecraft - путь к папке сервера'
    BACKUPPATH='/home/backup - путь к папке куда будет бекапа сервера'
    MAXHEAP=8096 - макс выдяляемой памяти
    MINHEAP=1024 - мин выдяляемой памяти
    HISTORY=1024
    CPU_COUNT=1 - сколько ядер выделять
    INVOCATION="
    java -Xmx${MAXHEAP}M -Xms${MINHEAP}M -XX:+UseConcMarkSweepGC \
    -XX:+CMSIncrementalPacing -XX:parallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -Dfile.encoding=UTF-8 \
    -jar $SERVICE $OPTIONS"

    ME=`whoami`
    as_user() {
    if [ $ME == $USERNAME ] ; then
    bash -c "$1"
    else
    su - $USERNAME -c "$1"
    fi
    }

    mc_start() {
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    echo "$SERVICE работает!"
    else
    echo "Запуск $SERVICE..."
    cd $MCPATH
    as_user "cd $MCPATH && screen -h $HISTORY -dmS minecraft $INVOCATION"
    sleep 7
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    echo "$SERVICE сейчас работает."
    else
    echo "Ошибка! Невозможно запустить $SERVICE!"
    fi
    fi
    }

    mc_saveoff() {
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    echo "$SERVICE is running... suspending saves"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say НАЧАЛО БЕКАПА СЕРВЕРА. Сервер работает в режиме только чтение...\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
    sync
    sleep 10
    else
    echo "$SERVICE не работает. Not suspending saves."
    fi
    }

    mc_saveon() {
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    echo "$SERVICE is running... re-enabling saves"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say КОНЕЦ БЕКАПА СЕРВЕРА. Сервер работает в режиме запись-чтение...\"\015'"
    else
    echo "$SERVICE is not running. Not resuming saves."
    fi
    }

    mc_stop() {
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    echo "Stopping $SERVICE"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say СЕРВЕР, ЗАВЕРШИТ РАБОТУ ЧЕРЕЗ 10 СЕКУНД. Сохранение всех карт...\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
    sleep 7
    else
    echo "$SERVICE was not running."
    fi
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    echo "Error! $SERVICE could not be stopped."
    else
    echo "$SERVICE is stopped."
    fi
    }

    mc_update() {
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    echo "$SERVICE is running! Will not start update."
    else
    as_user "cd $MCPATH && wget -q -O $MCPATH/versions http://s3.amazonaws.com/Minecraft.Download/versions/versions.json"
    snap=`awk -v linenum=3 'NR == linenum {print; exit}' "$MCPATH/versions"`
    snapVersion=`echo $snap | awk -F'\"' '{print $4}'`
    re=`awk -v linenum=4 'NR == linenum {print; exit}' "$MCPATH/versions"`
    reVersion=`echo $re | awk -F'\"' '{print $4}'`
    as_user "rm $MCPATH/versions"
    if [ "$1" == "snapshot" ]; then
    MC_SERVER_URL=http://s3.amazonaws.com/Minecraft.Download/versions/$snapVersion/minecraft_server.$snapVersion.jar
    else
    MC_SERVER_URL=http://s3.amazonaws.com/Minecraft.Download/versions/$reVersion/minecraft_server.$reVersion.jar
    fi
    as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
    if [ -f $MCPATH/minecraft_server.jar.update ]
    then
    if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null`
    then
    echo "You are already running the latest version of $SERVICE."
    else
    as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
    echo "Minecraft successfully updated."
    fi
    else
    echo "Minecraft update could not be downloaded."
    fi
    fi
    }

    mc_backup() {
    mc_saveoff

    NOW=`date "+%Y-%m-%d_%Hh%M"`
    BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
    echo "Резервное копирование мира Minecraft..."
    #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
    as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"

    echo "Резервное копирование $SERVICE"
    as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
    #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""

    mc_saveon

    echo "Сжатие резервного копирования..."
    as_user "gzip -f \"$BACKUP_FILE\""
    echo "Done."
    }

    mc_command() {
    command="$1";
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    pre_log_len=`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`
    echo "$SERVICE is running... executing command"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
    sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
    # print output
    tail -n $[`wc -l "$MCPATH/logs/latest.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/logs/latest.log"
    fi
    }

    #Start-Stop here
    case "$1" in
    start)
    mc_start
    ;;
    stop)
    mc_stop
    ;;
    restart)
    mc_stop
    mc_start
    ;;
    update)
    mc_stop
    mc_backup
    mc_update $2
    mc_start
    ;;
    backup)
    mc_backup
    ;;
    status)
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
    echo "$SERVICE is running."
    else
    echo "$SERVICE is not running."
    fi
    ;;
    command)
    if [ $# -gt 1 ]; then
    shift
    mc_command "$*"
    else
    echo "Must specify server command (try 'help'?)"
    fi
    ;;

    *)
    echo "Usage: $0 {start|stop|update|backup|status|restart|command \"server command\"}"
    exit 1
    ;;
    esac

    exit 0
    Дальнейшая установка
    Код:
    sudo chmod a+x /etc/init.d/minecraft
    Код:
    update-rc.d minecraft defaults
    настройка крона
    Код:
    crontab -e
    Каждый понедельник бекап:
    Код:
    0 0 * * 1 /etc/init.d/minecraft backup
    Каждый день в 06:30 рестарт:
    Код:
    30 6 * * * /etc/init.d/minecraft restart
    Управление стартом/запуском вручную
    Код:
    sudo /etc/init.d/minecraft start
    Код:
    sudo /etc/init.d/minecraft stop
    Код:
    sudo /etc/init.d/minecraft restart
    Добавление сценария в автозагрузку:

    Код:
    sudo update-rc.d minecraft defaults 80
    Чтобы открыть запущеный сервер
    Код:
    screen -r
    Чтобы свернуть и не остановить запущеный сервер
    Код:
    CTRL+A+D
    P.S
    Код:
    CTRL+A 
    закрывает окно и останавливает сервер=)
     
  2. Juice987

    Juice987 Активный участник Пользователь

    Баллы:
    76
    Полезно
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Сам ты кустарник, мы все сидим на ртулките.
     
  4. InterVi

    InterVi Старожил Пользователь

    Баллы:
    173
    Мне уже свой набор скриптов удобней стал, в нем столько всего есть.
     
  5. chief

    chief Активный участник Пользователь

    Баллы:
    76
    достаточно будет выполнить # service minecraft start/stop/restart/backup
     
  6. Alexgrist

    Alexgrist Старожил Пользователь

    Баллы:
    173
    mc_update() там вообще ни к чему.
     

Поделиться этой страницей