Настройка сервера Minecraft на Linux

В этой статье будет описано как настроить игровой сервер майнкрафт на Linux со всеми ньюансами которые могут получиться.

Для примера расссмотрим настройку работы сервера для Linux на Debian на одном из самых выгоднейших хостингов VDS. В этом хостинге также имеется специальный тариф для создания серверов Minecraft.

 

Приступаем к установке / настройке сервера

 1. Копирование файлов на  VDS.

Для начала кидаем всю сборку сервера на хостинг, если такой сборки у вас нет, рекомендуется собрать её у себя на компьютере либо скачать.

 

2. Установка главному файлу прав 775

Указываем файлу craftbukkit-<version>-<snapshot>.jar или minecraft_server.jar права на исполнение.  Для осуществления этого при наличии ISP Manager'а вы можете выставить соответствующие права на выделенном файле нажав вверху кнопку "Атрибуты". Либо это действие можно впонить через терминал как chmod a+x <имя файла>. Будьте внимательны возможно вам будет необходимо переместиться в папку с сервером. Если у вас в корневой папке пользователя файлы сервера лежат в папке, например, mcserv то необходимо выполнить команду в 2 шага. Сначала cd mcserv а уже затем chmod a+x <имя файла>

Что ж папки сервера у нас в порядке, приступим к установке Java.

 

3. Установка Java

Для установки Java на Debian'е необходимо ввести в терминале слудующую команду устанавливающую из репозитория сам продукт:

apt-get install openjdk-6-jre

После ввода вам возможно должны предложить согласиться с установкой, введите y для соглашения. 

После выполнения вышеуказанных действий рекомендуется перезагрузить машину, после чего выполните dpkg --configure -для полной конфигурации установленных пакетов. На этом установка Java завершена. Ну а больше для работоспособности сервера Minecraft ничего и не нужно.

 

4. Тестовый запуск

 Откройте терминал SSH. с помощью команды cd перейдите в папку с сервером. Затем введите следующее: java -Xms1G -Xmx1G -jar craftbukkit-<version>-<snapshot>.jar nogui , где 

-Xms1G -Xmx1G Обьём памяти на который будет рассчитывать Виртуальная Java машина. 1G - 1 Гигабайт 2G - 2 Гигабайта

craftbukkit-<version>-<snapshot>.jar - ваш исполняемый файл, например - craftbukkit-1.2.5-R4.1.jar.

После запуска у вас должны поочерёдно выводиться в консоли строки запуска сервера - загрузка плагинов, создание и загрузка мира и тд.

На этом всё, если вы всё сделали правильно, ваш сервер должен работать и быть доступным по умолчанию по адресу <ваш IP>:25565. Например:

78.24.219.108:25565. Однако это пока тестовый запуск и проверка работоспособности всей настройки, скорее всего если вы закроете консоль сервер так же может быть закрыт. При желании вы можете изменить порт и прочие параметры сервера в файле server.properties. 

//Будьте внимательны при размещении сервера. Если вы случайно разместите его за предалами папки пользователя от которого идёт вызов запуска - сервер будет работать очень странно и косо выкидывая сообщение "User not premium" , "Подключение прервано" или "Конец потока"

 

5. Установка скрипта автоматической загрузки.

Теперь для для ещё более стабильной и удобной работы мы установим скрипт автозагрузки/автоперезагрузки для Minecraft сервера. 

Создайте в папке /etc/init.d/ файл без расширения с названием minecraftи наполните его содержимым:

#!/bin/bash
# /etc/init.d/minecraft
# version 0.3.7 2012-03-06 (YYYY-MM-DD)
### BEGIN INIT INFO
# Provides:   minecraft
# Required-Start: $local_fs $remote_fs
# 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='minecraft_server.jar'
OPTIONS='nogui'
USERNAME='minecraft'
WORLD='world'
MCPATH='/home/minecraft/minecraft'
BACKUPPATH='/media/remote.share/minecraft.backup'
CPU_COUNT=1
INVOCATION="java -Xmx1024M -Xms1024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -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 is already running!"
  else
    echo "Starting $SERVICE..."
    cd $MCPATH
    as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
    sleep 7
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is now running."
    else
      echo "Error! Could not start $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 SERVER BACKUP STARTING. Server going readonly...\"\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 is not running. 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 SERVER BACKUP ENDED. Server going read-write...\"\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 SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\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
    MC_SERVER_URL=http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"`
    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 "Backing up minecraft world..."
   #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 "Backing up $SERVICE"
   as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
   #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""
   mc_saveon
   echo "Compressing backup..."
   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/server.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/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.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
    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

Где измените следующие строки относительно вашей конфигурации:

SERVICE='craftbukkit--.jar' //ваш исполняемый файл

OPTIONS='nogui' // не менять

USERNAME='minecraft' //ваше имя пользователя в системе Linux

MCPATH='/home/minecraft/minecraft' //ваша папка с сервером

Внимание старайтесь указывать полные пути ОТ КОРНЯ СИСТЕМЫ!

Затем, назначьте этому файлу права на исполнение

 chmod a+x /etc/init.d/minecraft

и добавьте его в список автозагрузки командой: 

update-rc.d minecraft defaults


Всё, на этом установка скрипта завершена, для его проверки перезапустите ваш хостинг - сервер должен включиться автоматически. или введите в терминале для запуска сервера : sh /etc/init.d/minecraft start. Так же для вас доступны команды управления сервера через терминал:

sh /etc/init.d/minecraft start - Запустить сервер

sh /etc/init.d/minecraft stop - Остановить сервер

sh /etc/init.d/minecraft restart - Перезагрузка сервера

sh /etc/init.d/minecraft status - Статус сервера

sh /etc/init.d/minecraft command <команда> - Выполнить команду на сервере от игровой консоли. Например sh /etc/init.d/minecraft command say WOW

6. Добавление сервера Minecraft в планировщик Cron для автоперезагрузки

 Для пользователей имеющих ISP Manager это сущая пара пустяков. Перейдя в Cron из панели управления, нажмите вверху кнопку создать. В появившемся окошке введите полный путь от корня системы до файла minecraft с командой перезагрузки. Скорее всего у вас это будет выглядеть так  /etc/init.d/minecraft restart и поставьте период каждые 3 часа.

 

Всё на этом небольшой гайд по установке и настройке сервера майнкрафт на Linux завершён, по поводу ошибок и неудачах пишите в комментариях.



Добавить комментарий


Защитный код
Обновить

Карта сайта