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

Утилита Профессиональный start.sh. Профилирование и не только

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем Dymeth, 21 май 2021.

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

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Писал для себя скрипт запуска. За несколько лет он оброс большим количеством функций. Делюсь с вами.
    Работает только в Linux (shell + bash).

    Возможности и особенности:
    - Использование флагов от Aikar (само собой)
    - Автоматический перезапуск сервера при остановке/падении (само собой)
    - Все функции подробно описаны на русском языке
    - Удобная идентификация процесса сервера в top/htop и т.д.
    - Автоматическое создание сессии screen/tmux (и при желании переход "внутрь")
    - Профилирование и/или отладка (без конфликта с флагами от Aikar)
    - Указание конфига log4j2
    - Принудительное обновление данных миров на актуальный формат версии игры
    - Частичное решение проблем с запуском на Java 12+

    Использование элементарное:
    1) Перейти в папку сервера при помощи cd
    2) Запустить скрипт: sh start.sh или ./start.sh (во втором случае должны быть права на исполнение файла)

    При необходимости некоторые параметры можно принимать прямо из командной строки при запуске скрипта. А это позволит автоматизировать запуск серверов (например, для мини-игр).

    Помимо этого, в spigot.yml рекомендую параметру "restart-on-crash" задать значение "false".

    Посмотреть скрипт с подсветкой синтаксиса:
    https://gitlab.com/Dymeth/MCServerStarter/-/blob/master/start.sh

    Скачать скрипт автоматически:
    Код:
    wget https://gitlab.com/Dymeth/MCServerStarter/-/raw/master/start.sh
    chmod 744 start.sh
    
    Для автозапуска скрипта при ребуте машины можно настроить задачу в cron:
    @reboot cd /home/директория_сервера/;sh ./start.sh;

    P.S. Для работы требуется bash 4.0 или новее
     
    Последнее редактирование: 29 дек 2023
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Может вариант с Tmux запилишь?
     
  3. Pro Mortred

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

    Баллы:
    66
    Имя в Minecraft:
    ProMortred
    годно :good:
     
  4. DJMixa

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    Может я что-то не так делаю, но при запуске скрипта консоль ругается с ошибкой на do
    [​IMG] [​IMG]
     
  5. Автор темы
    Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    PowerShell что ли? Вообще, скрипт под линуксовские shell и bash.

    Да по идее каждый может под себя переделать, не сложно под tmux. Сам сейчас вообще пользую докеры вместо screen с tmux. Вот это реально челлендж
     
    Последнее редактирование: 13 июн 2021
  6. DJMixa

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    Всё, я понял в чём проблема. При создании start.sh на Windows ругается Linux.
    Чтобы исправить это, через Git Bash(либо другой удобный вам имитатор Linux) нужно преобразовать start.sh виндосовкий в Unix для linux командой
    Код:
    $ dos2unix srcFile outFile
    Я сам работаю с Windows, но с Linux только начинаю работать, вот и исполняю такие траблы
     
  7. Pro Mortred

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

    Баллы:
    66
    Имя в Minecraft:
    ProMortred
    Извращенец
     
  8. DJMixa

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    Де-факто, это моё второе имя в программировании
     
  9. deadanykey

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

    Баллы:
    96
    Вангую, что дело в конце строк.
    Notepad++ -> Правка -> Конверсия конца строки
     
  10. DJMixa

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

    Баллы:
    66
    Имя в Minecraft:
    SKQ0
    Вопрос, как адаптировать этот скрин под BungeeCord?
     
  11. SashaBrine

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

    Баллы:
    76
    Имя в Minecraft:
    IJustFortiLive
    Какая разница BungeeCord или Bukkit. У банжи только нет /restart и вместо /stop - /end.

    Так что попробуй на банже, возможно не сработает.
     
  12. Pro Mortred

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

    Баллы:
    66
    Имя в Minecraft:
    ProMortred
    А как там? Только скрин(процесс) киллять?
     
  13. SashaBrine

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

    Баллы:
    76
    Имя в Minecraft:
    IJustFortiLive
    Бро, а почему не:
    Код:
    #!/bin/bash
    ?
     
  14. Автор темы
    Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Потому что скрипт позволяет запускать его и через sh, хотя вторая часть скрипта выполняется исключительно bash (независимо от того, чем запускали). Можешь сразу через bash запускать - ничего не сломается
     
  15. SashaBrine

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

    Баллы:
    76
    Имя в Minecraft:
    IJustFortiLive
    Да я знаю что делает этот комментарий, я просто спросил почему ты используешь старую версию консоли
     
  16. Автор темы
    Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Использовать можно что угодно - это будет работать. Разницы нет
     
    Последнее редактирование: 15 май 2022
  17. Siorinex

    Siorinex Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Siorinex
    Добавлю: старт можно быстрее сделать через
    Код:
    ./start.sh
    Вопрос: как его корректно останавливать??? После "stop" он перезапускается...
     
  18. Автор темы
    Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    CTRL+C до полного прекращения выполнения
     
  19. Автор темы
    Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Обновил скрипт. Если хотите перейти на новую версию - необходимо скачать скрипт заново и настроить параметры вручную.

    Изменения (v1.1):

    1) Скрипт влил в гит, это позволяет качать его автоматически. Ссылки на скрипт в первом посте.

    2) Поддержка tmux:
    - Добавлен параметр execution_type. Может принимать значение screen или tmux
    - Параметр join_screen переименован в auto_console_join

    3) Автоматический поиск jar-файла ядра. Это удобно при частом обновлении ядра. При необходимости название джарника всё ещё можно указать вручную в параметре jar_file

    4) Параметр debugging_port переименован в debug_agent_address, поскольку принимает теперь не только порт, но и хост (адрес бинда)

    5) Все комментарии продублированы на английском языке, добавлено больше примеров использования параметров

    6) Небольшие технические изменения (багфиксы и читабельность)

    В планах ещё поддержка запуска через врапперы (Gravit Launcher, Keiko Plugin Inspector т.д.), а также поддержка запуска BungeeCord и Velocity. Но когда это будет, и будет ли вообще - без понятия. В теории и с текущим скриптом можно накостылять всё это, но это на ваш откуп.

    Ещё в будущем добавлю аргумент --add-modules=jdk.incubator.vector как обязательный.

    PHP:
    #!/bin/sh

    # Все системные пути и названия файлов чувствительны к регистру (заглавные и строчные буквы)

    # Параметры приложения-сервера

    server_name="lobby" # Для создания скрина и идентификации процесса в top, htop и т.д.
    join_screen=true # Входить ли в скрин автоматически после запуска скрипта
    jar_file="paper.jar" # Название файла ядра
    min_memory="1G" # Минимальное количество памяти
    max_memory="5G" # Максимальное количество памяти
    server_port="" # Порт. Если не указан - используется значение из server.properties
    force_chunks_upgrade=false # Использовать ли при запуске принудительное обновление всех чанков до формата текущей версии ядра

    # Параметры Java

    java_dir="~/jdk-16.0.1/bin" # Директория Java (для JDK добавьте в конце "/bin"). Если не указана - используется системный путь
    profiling=false # Включить ли профилирование (требуется больше системных ресурсов). Работает только с JDK
    fix_java_12_issues=false # Предотвращать ли ошибки, связанные с использованием Java 12+
    debugging_port="" # Порт агента отладки. Если не указан - отладка отключена
    log4j_config="" # Файл параметров log4j с расширением .xml. Если не указано - используются настройки по-умолчанию



    # Всё, что ниже, менять не рекомендуется

    # Источник: https://mcflags.emc.gs
    aikar_jvm_flags="-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true"
    jvm_flags="-server -Dfile.encoding=UTF-8"
    app_flags="nogui"
    screen_name="${server_name}"
    htop_name="${server_name}"
    script_name=`basename "$0"`

    if [ 
    "$1" != "screen" ]; then
        screen 
    ----${screen_namebash ${script_namescreen
        
    "$join_screentrue ] && screen -${screen_name}
        exit
    fi

    #!/bin/bash

    "$java_dir!= "" ] && java_dir="${java_dir}/"

    jvm_flags="${jvm_flags} ${aikar_jvm_flags}"
    if [ "$profilingtrue ]; then
        htop_name
    ="${htop_name}-profiling"
        
    jvm_flags="${jvm_flags// -XX:+PerfDisableSharedMem/}"
        
    jvm_flags="${jvm_flags} -Xshare:off"
    fi
    htop_name
    ="$USER.${htop_name}"

    "$fix_java_12_issuestrue ] && jvm_flags="${jvm_flags} --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED"
    "$debugging_port!= "" ] && jvm_flags="${jvm_flags} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:${debugging_port}"
    "$log4j_config!= "" ] && jvm_flags="${jvm_flags} -Dlog4j.configurationFile=${log4j_config}"

    "$server_port!= "" ] && app_flags="${app_flags} -port ${server_port}"
    "$force_chunks_upgradetrue ] && app_flags="${app_flags} --forceUpgrade"

    jvm_flags="-D_server=${htop_name} -Xms${min_memory} -Xmx${max_memory} ${jvm_flags}"

    while true
    do
        eval ${
    java_dir}java ${jvm_flags} -jar ${jar_file} ${app_flags}
        echo 
    "Server $screen_name stopped. Rebooting in:"
        
    for i in {3..1}
        do
            echo 
    "$i..."
            
    sleep 1
        done
    done

    # Автор скрипта: dymeth.ru

    Не знаю, актуально ли, но сделал
     
    Последнее редактирование: 1 сен 2022
  20. _Ruleto4ka_

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

    Баллы:
    76

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