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

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

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

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

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

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

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

    Использование элементарное:
    1) Перейти в папку сервера при помощи cd
    2) Запустить скрипт: sh start.sh

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

    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
     
    Последнее редактирование: 24 авг 2021
  2. Быстрая раскрутка сервера Minecraft
  3. imDaniX

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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