Туториал UPD Запуск сервера через screen в фоновом режиме

wailorman

Активный участник
Пользователь
Баллы
93
Имя в Minecraft
wailorman
Скорее всего, на нашем форуме уже есть подобная тема, но я не думаю, что моя статья будет лишней, т.к. я ее собирал с десятков форумов в гугле.
Итак, с помощью этой статьи будет возможен автоматический рестарт сервера без Cron (спасибо плагину Флумастера) и с постоянным доступом в консоль сервера. Думаю, это позволит многим разработчикам сделать ЛК для управления сервером.
  1. Создаем файл для запуска сервера run.sh со следующим содержимым:
    Код:
    while true
    do
    java -Xincgc100M -Xmx100M -jar minecraft_server.jar
    done
  2. Выставляем ему права на запуск
    Код:
    chmod +x run.sh
  3. Создаем сессию screen
    Код:
    screen -S minecraft -d -m
  4. Запускаем сервер
    Код:
    screen -S minecraft -X -p0 stuff $'sh run.sh\n'
  5. Баним игрока
    Код:
    screen -S minecraft -X -p0 stuff $'ban wailorman\n'
  6. Перезапускаем сервер
    Код:
    screen -S minecraft -X -p0 stuff $'stop\n'
    Т.к. мы создали файл цикличного запуска сервера run.sh, то после каждой остановки сервера он будет запускаться вновь и вновь
  7. Останавливаем сервер
    Код:
    screen -S minecraft -X -p0 stuff $'save-all\n'
    screen -S minecraft -X kill
    или
    Код:
    screen -S minecraft -X quit
С идеи LiveD я сделал скрипт, который автоматически будет запускать, рестартить и останавливать Ваш сервер командой
./control.sh start|restart|stop
Чтобы скрипт работал, Ваш сервер по-умолчанию должен находится по адресу ~/minecraft/ , куда Вы должны поместить все содержимое архива control-final.zip (папка control и файл control.sh). В ином случае поменяйте все ~/minecraft в shell-никах на Вашу директорию.
Затем Вам нужно поменять команду для запуска сервера в файле control/run.sh.
Запускать сервер Вы будете командой
./control.sh start
Переходить в консоль сервера
screen -r minecraft
Выходить из него комбинацией клавиш Ctrl+A+D
Рестартить сервак также просто
./control.sh restart
А делать безопасную становку сервера (пофиксил)
./control.sh stop

Полная инструкция для Debian
Устанавливаем screen от имени root
apt-get install screen
Создаем пользователя minecraft
adduser minecraft
Переходим на пользователя minecraft
su minecraft
cd ~/
Создаем директорию minecraft, куда Вы будете заливать свою сборку
mkdir minecraft
cd ./minecraft
Заливаем файлы с архива во вложении и свою сборку
Изменяем команду запуска сервера
nano ./control/run.sh
Запускаем сервер (может выдать ошибку No screens found. Игнорим)
./control.sh start
Заходим в консоль сервера
screen -r minecraft
Закрываем консоль комбинацией Ctrl+A+D
Перезапускаем сервер
./control.sh restart
Останавливаем сервер
./control.sh stop


​
 
не проще ли использовать ртулкит, запуская его в скрине? и не надо будет так жестоко выключать серв. и авторестарт будет.
 
Меня интересовало полностью автономное решение, где я мог бы запускать screen хоть с <?exec("run.sh")?>, и screen бы не ругался, что ему нужен вывод в нормальный терминал, а не в /dev/null
Весь этот скрипт можно автоматизировать еще больше, и свести абсолютно все управление сервером к одному shell-файлу.
Я на форуме почти не сижу, и серверами minecraft уже не занимаюсь. Только Unix-системы. Посчитал, что поделиться маленьким достижением с вами будет только в пользу.

А сервер можно останавливать мягче, если оно того требует.
screen -r minecraft, а дальше ручками
 
винду ставьте и не парьтесь.
ой только не орите что у unix производительность лучше.
Держу сервер 160 игроков вечером (32 плагина), 2012, отлично все. Руки главное иметь как у гарри поттера.
 
О производительности Java на разных ОС можно почитать другие темы. Хоть эту
 
О производительности Java на разных ОС можно почитать другие темы. Хоть эту
Я клал на темы.
У меня два сервера на одном 100 забито постоянно (linux), на втором 180 человек с запасом (windows 2012), и при создании сервера я не посещал rubukkit вообще. А мой друг который начитался всяких тем, так задурен, что и 30 слотов нормально сделать не может.
 
Я давно в паблике нашел хороший скрипт, который может выполнять команды, бэкапа, рестарта, стопа и запуска, вида: "sh 11.sh *start,stop...*"
 
Я давно в паблике нашел хороший скрипт, который может выполнять команды, бэкапа, рестарта, стопа и запуска, вида: "sh 11.sh *start,stop...*"
Было бы неплохо, если бы Вы не только рассказали о его возможностях, но и выложили. Многим будет интересно посмотреть на решение лучше моего.
 
Пардон, а как открыть скрин с консолью сервера, что бы мониторить происходящее и потом вернутся? Дайте команды пожалуйста ^^
 
Save-all
Kill
Ну ты жестокий...
Это один из вариантов экстренной остановки сервера, если она нужна. Если нужен рестарт, достаточно отправить stop, после чего он будет автоматически заново запущен. А нормально остановить можно только если прекратить выполнение цикла.

Пардон, а как открыть скрин с консолью сервера, что бы мониторить происходящее и потом вернутся? Дайте команды пожалуйста ^^
screen -r minecraft
 
Ты знаешь как сделать на сайте,консоль что бы Все логи были??
 
Это один из вариантов экстренной остановки сервера, если она нужна. Если нужен рестарт, достаточно отправить stop, после чего он будет автоматически заново запущен. А нормально остановить можно только если прекратить выполнение цикла.


screen -r minecraft
а выйти от туда как?
 
а выйти от туда как?
Ctrl+A+D для того, чтобы свернуть сессию screen

Ты знаешь как сделать на сайте,консоль что бы Все логи были??
Выводить логи через screen - это костыль костылей. Я бы покопался в сторону чтения файла логов
 
спасибо
 
а от кила процесса что поможет?
поможет ртулкит. запускаем его под скрином безо всяких циклов. к серверу коннектимся через телнет (можно и в скрин впилиться, но телнет убивает возможность случайно положить серв комбинацией ctrl+c + нужен пароль только от ртулкита, а не от всей машины). если надо, сервак ребутится сам. ребутать и выключать его можно тоже командой.
 
не просто какойто бот на хостинге убивает процес сервера
 
Назад
Верх