Рейтинг:1

Сервер Tomcat, на котором запущено приложение springboot, неожиданно закрывает соединение с smtp-сервером

флаг ru

У меня есть сервер tomcat, на котором запущено приложение весенней загрузки на хосте с использованием CentOS 8, которое подключается к почтовому клиенту с помощью SMTP. Проблема в том, что он резко закрывает соединение до того, как произойдет рукопожатие TLS с опцией STARTTLS. Он нормально работает с другими узлами под управлением CentOS 7 и Linux-сервера Oracle. Проблема не может быть в приложении, иначе оно не работало бы ни на каких узлах. Я проверил с помощью Wireshark, чтобы убедиться, что это наш узел приложения прерывает соединение. Вот стенограмма связи TCP, которую я записал с помощью tcpdump.

220 mta1.***.local Постфикс ESMTP
ЭХЛО ****
250-мта1.***.местный
250-ТРУБОПРОВОД
250-РАЗМЕР 69730304
250-ВРФЯ
250-ЭТРН
250-STARTTLS
250 РАСШИРЕННЫХ КОДОВ СОСТОЯНИЯ
250-8БИТИМИМ
250 ДСН
СТАРТЛС
220 2.0.0 Готов к запуску TLS

И ничего после этого. Прерывание соединения было внезапным, без тайм-аута или чего-то подобного. Я также проверил файл server.xml на предмет каких-либо настроек, там не было никакого упоминания о почте или smtp.

Я попробовал то же самое, используя openssl, и он работает, успешно запуская TLS через соединение smtp, так что это не проблема с сервером, который также не поддерживает эту опцию. Кто-нибудь знает, почему это могло произойти?

openssl s_client -connect smtp.****.gov.**:587 -starttls smtp

Мой файл catalina.sh

#!/бин/ш
Cygwin=ложь
Дарвин = ложь
ос400=ложь
hpux=ложь
регистр "`uname`" в
CYGWIN*) cygwin=true;;
Дарвин*) darwin=true;;
OS400*) os400=истина;;
HP-UX*) hpux=true;;
эсак

# разрешить ссылки - $0 может быть программной ссылкой
ПРГ="$0"

в то время как [ -h "$PRG" ]; делать
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  если выражение "$link": '/.*' > /dev/null; тогда
    ПРГ="$ссылка"
  еще
    PRG=`имя_каталога "$PRG"`/"$link"
  фи
сделано

# Получить стандартные переменные окружения
PRGDIR=`имя_каталога "$PRG"`

# Установите CATALINA_HOME, только если он еще не установлен
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

# Скопируйте CATALINA_BASE из CATALINA_HOME, если она еще не установлена
[-z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

# Убедитесь, что любые пользовательские переменные CLASSPATH не используются при запуске,
# но разрешить их указывать в setenv.sh, в редком случае, когда это необходимо.
ПУТЬ К КЛАССУ=

если [-r "$CATALINA_BASE/bin/setenv.sh"]; тогда
  . "$ CATALINA_BASE/bin/setenv.sh"
Элиф [-r "$CATALINA_HOME/bin/setenv.sh"]; тогда
  . "$ CATALINA_HOME/bin/setenv.sh"
фи

# Для Cygwin убедитесь, что пути указаны в формате UNIX, прежде чем что-либо трогать
если $cygwin; тогда
  [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`
  [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
  [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`
  [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
фи

# Убедитесь, что ни CATALINA_HOME, ни CATALINA_BASE не содержат двоеточие
# так как он используется в качестве разделителя в пути к классам, а Java не предоставляет
# механизм экранирования, если в пути встречается один и тот же символ.
случай $CATALINA_HOME в
  *:*) echo "Используя CATALINA_HOME: $CATALINA_HOME";
       echo "Невозможно запустить, так как CATALINA_HOME содержит символ двоеточия (:)";
       выход 1;
эсак
случай $CATALINA_BASE в
  *:*) echo "Используем CATALINA_BASE: $CATALINA_BASE";
       echo "Невозможно запустить, так как CATALINA_BASE содержит символ двоеточия (:)";
       выход 1;
эсак

# Для ОС400
если $os400; тогда
  # Установите приоритет задания на стандартный для интерактивного (интерактивный - 6) с помощью
  # интерактивный приоритет - 6, вспомогательные потоки, отвечающие на запросы
  # будут выполняться с тем же приоритетом, что и интерактивные задания.
  COMMAND='chgjob job('$JOBNAME') runpty(6)'
  система $ КОМАНДА

  # Включить многопоточность
  экспорт QIBM_MULTI_THREADED=Y
фи

# Получить стандартные переменные среды Java
если $os400; тогда
  # -r будет работать только на os400, если файлы:
  # 1. принадлежит пользователю
  # 2. принадлежит ОСНОВНОЙ группе пользователя
  # это не будет работать, если пользователь принадлежит к дополнительным группам
  . "$ CATALINA_HOME"/bin/setclasspath.sh
еще
  если [-r "$CATALINA_HOME"/bin/setclasspath.sh]; тогда
    . "$ CATALINA_HOME"/bin/setclasspath.sh
  еще
    echo "Не удается найти $CATALINA_HOME/bin/setclasspath.sh"
    echo "Этот файл необходим для запуска этой программы"
    выход 1
  фи
фи

# Добавляем дополнительные jar-файлы в CLASSPATH
если [ ! -z "$ПУТЬ К КЛАССУ" ] ; тогда
  ПУТЬ К КЛАССУ = "ПУТЬ К КЛАССУ":
фи
CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar

если [-z "$CATALINA_OUT"]; тогда
  CATALINA_OUT=/home/*****/logs/catalinalogs/catalina.out
фи

если [ -z "$CATALINA_TMPDIR" ] ; тогда
  # Определите java.io.tmpdir для использования в Catalina
  CATALINA_TMPDIR="$CATALINA_BASE"/темп.
фи

# Добавьте tomcat-juli.jar в путь к классам
# tomcat-juli.jar может быть перезаписан для каждого экземпляра
если [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; тогда
  CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar
еще
  CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar
фи

# Bugzilla 37848: если телетайп недоступен, не выводить на консоль
have_tty=0
если [-т 0]; тогда
    have_tty=1
фи

# Для Cygwin переключите пути на формат Windows перед запуском java
если $cygwin; тогда
  JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
  JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
  CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
  CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
  CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
  CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  [ -n "$JAVA_ENDORSED_DIRS" ] && JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
фи

если [ -z "$JSSE_OPTS" ] ; тогда
  JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
фи
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"

# Регистрация пользовательских обработчиков URL
# Сделайте это здесь, чтобы пользовательские дескрипторы URL (в частности, 'war:...') можно было использовать в политике безопасности
JAVA_OPTS="$JAVA_OPTS-Djava.protocol.handler.pkgs=org.apache.catalina.webresources"

# Установите конфигурационный файл juli LogManager, если он присутствует и не было выполнено переопределение
если [-z "$LOGGING_CONFIG"]; тогда
  если [-r "$CATALINA_BASE"/conf/logging.properties]; тогда
    LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
  еще
    # Багзилла 45585
    LOGGING_CONFIG="-Dnop"
  фи
фи

если [-z "$LOGGING_MANAGER"]; тогда
  LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
фи

# Установите UMASK, если он не был переопределен
если [-z "$UMASK"]; тогда
    УМАСК="0027"
фи
umask $UMASK

# Java 9 больше не поддерживает java.endorsed.dirs
# системное свойство. Попробуйте использовать его, только если
# JAVA_ENDORSED_DIRS был установлен явно
# или CATALINA_HOME/endorsed существует.
ENDORSED_PROP=ignore.endorsed.dirs
если [-n "$JAVA_ENDORSED_DIRS"]; тогда
    ENDORSED_PROP=java.endorsed.dirs
фи
если [-d "$CATALINA_HOME/одобрено"]; тогда
    ENDORSED_PROP=java.endorsed.dirs
фи

# Сделать umask доступным при использовании org.apache.catalina.security.SecurityListener
JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"

если [-z "$USE_NOHUP"]; тогда
    если $hpux; тогда
        USE_NOHUP = "истина"
    еще
        USE_NOHUP="ложь"
    фи
фи
сбросить _NOHUP
если [ "$USE_NOHUP" = "истина" ]; тогда
    _NOHUP="нетуп"
фи

# Добавьте специальные параметры запуска JAVA 9, необходимые для Tomcat
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.lang=ВСЕ-БЕЗ ИМЕНИ"
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.io=ВСЕ-БЕЗ ИМЕНИ"
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"
экспорт JDK_JAVA_OPTIONS

# ----- Выполнить запрошенную команду ---------------------------------------- -

# Bugzilla 37848: выводить это, только если у нас есть телетайп
если [ $have_tty -eq 1 ]; тогда
  echo "Используя CATALINA_BASE: $CATALINA_BASE"
  echo "Используя CATALINA_HOME: $CATALINA_HOME"
  echo "Используя CATALINA_TMPDIR: $CATALINA_TMPDIR"
  если [ "$1" = "отладка" ] ; тогда
    echo "Используя JAVA_HOME: $JAVA_HOME"
  еще
    echo "Используя JRE_HOME: $JRE_HOME"
  фи
  echo "Используя CLASSPATH: $CLASSPATH"
  если [ ! -z "$CATALINA_PID"]; тогда
    echo "Используя CATALINA_PID: $CATALINA_PID"
  фи
фи

если [ "$1" = "jpda" ] ; тогда
  если [-z "$JPDA_TRANSPORT"]; тогда
    JPDA_TRANSPORT="dt_socket"
  фи
  если [-z "$JPDA_ADDRESS"]; тогда
    JPDA_ADDRESS="локальный:8000"
  фи
  если [-z "$JPDA_SUSPEND"]; тогда
    JPDA_SUSPEND="n"
  фи
  если [-z "$JPDA_OPTS"]; тогда
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,адрес=$JPDA_ADDRESS,сервер=y,suspend=$JPDA_SUSPEND"
  фи
  CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
  сдвиг
фи

# TODO: Bugzilla 63815
# В настоящее время это не работает (и не может работать), если значения, используемые в
# CATALINA_OPTS и/или JAVA_OPTS требуют заключения в кавычки. Видеть:
# https://bugs.openjdk.java.net/browse/JDK-8234808
если [ "$1" = "отладка" ] ; тогда
  если $os400; тогда
    echo "Команда отладки недоступна в OS400"
    выход 1
  еще
    сдвиг
    если [ "$1" = "-безопасность" ] ; тогда
      если [ $have_tty -eq 1 ]; тогда
        эхо "Использование диспетчера безопасности"
      фи
      сдвиг
      exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
        -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
        -путь к классам "$ ПУТЬ К КЛАССУ" \
        -исходный путь "$ CATALINA_HOME"/../../java \
        -Djava.security.manager \
        -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" старт
    еще
      exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
        -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
        -путь к классам "$ ПУТЬ К КЛАССУ" \
        -исходный путь "$ CATALINA_HOME"/../../java \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" старт
    фи
  фи

Элиф ["$1" = "бег"]; тогда

  сдвиг
  если [ "$1" = "-безопасность" ] ; тогда
    если [ $have_tty -eq 1 ]; тогда
      эхо "Использование диспетчера безопасности"
    фи
    сдвиг
    eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -путь к классам "\"$ПУТЬ К КЛАССУ\"" \
      -Djava.security.manager \
      -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" старт
  еще
    eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -путь к классам "\"$ПУТЬ К КЛАССУ\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" старт
  фи

Элиф ["$1" = "начало"]; тогда

  если [ ! -z "$CATALINA_PID"]; тогда
    если [-f "$CATALINA_PID"]; тогда
      если [-s "$CATALINA_PID"]; тогда
        echo "При запуске обнаружен существующий файл PID."
        если [-r "$CATALINA_PID"]; тогда
          PID=`кошка "$CATALINA_PID"`
          ps -p $PID >/dev/null 2>&1
          если [$? -экв 0 ] ; тогда
            echo "Похоже, что Tomcat все еще работает с PID $PID.Старт прерван».
            echo "Если следующий процесс не является процессом Tomcat, удалите файл PID и повторите попытку:"
            ps -f -p $PID
            выход 1
          еще
            echo "Удаление/очистка устаревшего файла PID."
            rm -f "$ CATALINA_PID" >/dev/null 2>&1
            если [$? != 0]; тогда
              если [-w "$CATALINA_PID"]; тогда
                кошка /dev/null > "$ CATALINA_PID"
              еще
                echo "Невозможно удалить или очистить устаревший файл PID. Старт прерван."
                выход 1
              фи
            фи
          фи
        еще
          echo "Невозможно прочитать файл PID. Старт прерван."
          выход 1
        фи
      еще
        rm -f "$ CATALINA_PID" >/dev/null 2>&1
        если [$? != 0]; тогда
          если [ ! -w "$CATALINA_PID"]; тогда
            echo "Невозможно удалить или записать в пустой файл PID. Старт прерван."
            выход 1
          фи
        фи
      фи
    фи
  фи

  сдвиг
  нажмите "$CATALINA_OUT"
  если [ "$1" = "-безопасность" ] ; тогда
    если [ $have_tty -eq 1 ]; тогда
      эхо "Использование диспетчера безопасности"
    фи
    сдвиг
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -путь к классам "\"$ПУТЬ К КЛАССУ\"" \
      -Djava.security.manager \
      -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" старт \
      >> "$CATALINA_OUT" 2>&1 "&"

  еще
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -путь к классам "\"$ПУТЬ К КЛАССУ\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" старт \
      >> "$CATALINA_OUT" 2>&1 "&"

  фи

  если [ ! -z "$CATALINA_PID"]; тогда
    эхо $! > "$ КАТАЛИНА_PID"
  фи

  echo "Tomcat запущен."

Элиф ["$1" = "стоп"]; тогда

  сдвиг

  СОН=5
  если [ ! -z "$1" ]; тогда
    эхо $1 | grep "[^0-9]" >/dev/null 2>&1
    если [$? -gt 0]; тогда
      СОН=$1
      сдвиг
    фи
  фи

  СИЛА=0
  если [ "$1" = "-force" ]; тогда
    сдвиг
    СИЛА=1
  фи

  если [ ! -z "$CATALINA_PID"]; тогда
    если [-f "$CATALINA_PID"]; тогда
      если [-s "$CATALINA_PID"]; тогда
        kill -0 `кот "$CATALINA_PID"` >/dev/null 2>&1
        если [$? -gt 0]; тогда
          echo "Файл PID найден, но либо соответствующий процесс не найден, либо текущий пользователь не имеет разрешения на остановку процесса. Остановка прервана."
          выход 1
        фи
      еще
        echo "Файл PID пуст и был проигнорирован."
      фи
    еще
      echo "\$CATALINA_PID был установлен, но указанный файл не существует. Работает ли Tomcat? Остановка прервана."
      выход 1
    фи
  фи

  eval "\"$_RUNJAVA\"" $LOGGING_MANAGER "$JAVA_OPTS" \
    -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
    -путь к классам "\"$ПУТЬ К КЛАССУ\"" \
    -Dcatalina.base="\"$CATALINA_BASE\"" \
    -Dcatalina.home="\"$CATALINA_HOME\"" \
    -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
    org.apache.catalina.startup.Bootstrap "$@" остановить

  # остановка не удалась. Порт выключения отключен? Попробуйте обычное убийство.
  если [$? != 0]; тогда
    если [ ! -z "$CATALINA_PID"]; тогда
      echo "Команда остановки не удалась. Попытка сообщить процессу об остановке с помощью сигнала ОС."
      kill -15 `кот "$CATALINA_PID"` >/dev/null 2>&1
    фи
  фи

  если [ ! -z "$CATALINA_PID"]; тогда
    если [-f "$CATALINA_PID"]; тогда
      пока [ $SLEEP -ge 0 ]; делать
        kill -0 `кот "$CATALINA_PID"` >/dev/null 2>&1
        если [$? -gt 0]; тогда
          rm -f "$ CATALINA_PID" >/dev/null 2>&1
          если [$? != 0]; тогда
            если [-w "$CATALINA_PID"]; тогда
              кошка /dev/null > "$ CATALINA_PID"
              # Если Tomcat остановился, не пытайтесь принудительно остановить с пустым файлом PID
              СИЛА=0
            еще
              echo "Файл PID не может быть удален или очищен."
            фи
          фи
          echo "Кот остановился."
          сломать
        фи
        если [$SLEEP -gt 0]; тогда
          спать 1
        фи
        если [ $SLEEP -eq 0 ]; тогда
          echo "Tomcat не остановился вовремя."
          если [ $FORCE -eq 0 ]; тогда
            echo "Файл PID не был удален."
          фи
          echo "Для облегчения диагностики дамп потока был записан в стандартный вывод."
          kill -3 `кот "$CATALINA_PID"`
        фи
        SLEEP=`выражение $SLEEP - 1 `
      сделано
    фи
  фи

  KILL_SLEEP_INTERVAL=5
  если [ $FORCE -eq 1 ]; тогда
    если [-z "$CATALINA_PID"]; тогда
      echo "Не удалось убить: \$CATALINA_PID не установлен"
    еще
      если [-f "$CATALINA_PID"]; тогда
        PID=`кошка "$CATALINA_PID"`
        echo "Убить Tomcat с помощью PID: $PID"
        убить -9 $PID
        пока [ $KILL_SLEEP_INTERVAL -ge 0 ]; делать
            kill -0 `кот "$CATALINA_PID"` >/dev/null 2>&1
            если [$? -gt 0]; тогда
                rm -f "$ CATALINA_PID" >/dev/null 2>&1
                если [$? != 0]; тогда
                    если [-w "$CATALINA_PID"]; тогда
                        кошка /dev/null > "$ CATALINA_PID"
                    еще
                        echo "Файл PID не может быть удален."
                    фи
                фи
                echo "Процесс Tomcat был убит."
                сломать
            фи
            если [$KILL_SLEEP_INTERVAL -gt 0]; тогда
                спать 1
            фи
            KILL_SLEEP_INTERVAL=`выражение $KILL_SLEEP_INTERVAL - 1 `
        сделано
        если [ $KILL_SLEEP_INTERVAL -lt 0 ]; тогда
            echo "Tomcat еще не полностью уничтожен. Возможно, процесс ожидает какого-то системного вызова или может быть БЕСПЕРЕБОЙНЫМ."
        фи
      фи
    фи
  фи

Элиф ["$1" = "configtest"]; тогда

    eval "\"$_RUNJAVA\"" $LOGGING_MANAGER "$JAVA_OPTS" \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -путь к классам "\"$ПУТЬ К КЛАССУ\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap configtest
    результат=$?
    если [ $result -ne 0 ]; тогда
        echo "Обнаружена ошибка конфигурации!"
    фи
    выход $результат

Элиф ["$1" = "версия"]; тогда

    "$_RUNJAVA" \
      -classpath "$ CATALINA_HOME/lib/catalina.jar" \
      org.apache.catalina.util.ServerInfo

еще

  echo "Использование: catalina.sh (команды...)"
  эхо "команды:"
  если $os400; тогда
    echo "debug Запустите Catalina в отладчике (недоступно в OS400)"
    echo "debug -security Отладка Catalina с помощью диспетчера безопасности (недоступно в OS400)"
  еще
    echo "Отладка Запустите Catalina в отладчике"
    echo "debug -security Отладка Catalina с помощью менеджера безопасности"
  фи
  echo "jpda start Запустить Catalina под отладчиком JPDA"
  echo "запустить Start Catalina в текущем окне"
  echo " run -security Начать в текущем окне с менеджером безопасности"
  echo "запустить Start Catalina в отдельном окне"
  echo " start -security Запустить в отдельном окне с менеджером безопасности"
  echo "stop Stop Catalina, ожидание завершения процесса до 5 секунд"
  echo "stop n Stop Catalina, ожидание завершения процесса до n секунд"
  echo "stop -force Stop Catalina, подождите до 5 секунд, а затем используйте команду kill -KILL, если она все еще работает"
  echo "stop n -force Остановите Catalina, подождите до n секунд, а затем используйте команду kill -KILL, если она еще работает"
  echo " configtest Запустите базовую проверку синтаксиса в server.xml - проверьте код выхода для получения результата"
  echo "версия Какую версию tomcat вы используете?"
  echo "Примечание: ожидание завершения процесса и использование параметра -force требуют определения \$CATALINA_PID"
  выход 1

фи

Мой файл setenv.sh

# -Xms/XMX
# Xms Устанавливает начальный размер кучи
# Xmx устанавливает максимальный размер кучи.
# http://stackoverflow.com/questions/16087153/what-happens-when-we-set-xmx-and-xms-equal-size
# http://crunchify.com/jvm-tuning-heapsize-stacksize-garbage-collection-fundamental/
экспорт JAVA_OPTS="$JAVA_OPTS -Xms3072m -Xmx3072m"


Manish Adhikari avatar
флаг ru
Кто-нибудь ответит на это?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.