Score:1

Tomcat Server ที่กำลังเรียกใช้แอปพลิเคชัน springboot ปิดการเชื่อมต่อกับเซิร์ฟเวอร์ smtp ทันที

ธง ru

ฉันมีเซิร์ฟเวอร์ Tomcat ที่เรียกใช้แอปพลิเคชัน Spring Boot บนโฮสต์ที่ใช้ CentOS 8 ที่เชื่อมต่อกับไคลเอนต์อีเมลโดยใช้ SMTP ปัญหาคือมันปิดการเชื่อมต่อกะทันหันก่อนที่ TLS handshake จะเกิดขึ้นพร้อมกับตัวเลือก STARTTLS ทำงานได้ดีกับโหนดอื่นๆ ที่ใช้ CentOS 7 และเซิร์ฟเวอร์ Oracle linux ปัญหาไม่ได้อยู่ที่แอปพลิเคชัน มิฉะนั้นจะไม่ทำงานบนโหนดใดๆ ฉันตรวจสอบโดยใช้ Wireshark เพื่อดูว่าโหนดแอปพลิเคชันของเรายุติการเชื่อมต่อ นี่คือบันทึกการสื่อสาร TCP ที่ฉันบันทึกโดยใช้ tcpdump

220 mta1.***.local ESMTP Postfix
EHLO ****
250-mta1.***.local
250-การวางท่อ
250-SIZE 69730304
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 ดีเอสเอ็น
STARTTLS
220 2.0.0 พร้อมที่จะเริ่ม TLS

และไม่มีอะไรหลังจากนั้น การยุติการเชื่อมต่ออย่างกะทันหัน ไม่มีการหมดเวลาหรืออะไรทำนองนั้น ฉันยังตรวจสอบไฟล์ server.xml สำหรับการตั้งค่าใด ๆ ที่ไม่มีการกล่าวถึงเมลหรือ smtp แต่อย่างใด

ฉันลองแบบเดียวกันโดยใช้ openssl และใช้งานได้ เริ่ม TLS ผ่านการเชื่อมต่อ smtp ได้สำเร็จ ดังนั้นจึงไม่ใช่ปัญหาที่เซิร์ฟเวอร์ไม่รองรับตัวเลือกนี้เช่นกัน ไม่มีใครมีความคิดใด ๆ ว่าทำไมสิ่งนี้ถึงเกิดขึ้น?

opensl s_client -เชื่อมต่อ smtp.****.gov.**:587 -starttls smtp

ไฟล์ catalina.sh ของฉัน

#!/bin/sh
cygwin = เท็จ
ดาร์วิน = เท็จ
os400=เท็จ
hpux = เท็จ
กรณี "`uname`" ใน
CYGWIN*) cygwin=จริง;;
ดาร์วิน*) ดาร์วิน=จริง;;
OS400*) os400=จริง;;
HP-UX*) hpux=จริง;;
เอสแซค

# แก้ไขลิงก์ - $0 อาจเป็นซอฟต์ลิงก์
PRG = "$0"

ในขณะที่ [ -h "$PRG" ]; ทำ
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  ถ้า expr "$link" : '/.*' > /dev/null; แล้ว
    PRG="$ลิงค์"
  อื่น
    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"
elif [ -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 ไม่มีเครื่องหมายทวิภาค
# เนื่องจากใช้เป็นตัวคั่นใน classpath และ Java ระบุหมายเลข
# กลไกสำหรับการหลบหนีหากอักขระเดียวกันปรากฏในเส้นทาง
กรณี $CATALINA_HOME ใน
  *:*) echo "ใช้ CATALINA_HOME: $CATALINA_HOME";
       echo "ไม่สามารถเริ่มต้นได้ เนื่องจาก CATALINA_HOME มีเครื่องหมายทวิภาค (:)";
       ทางออก 1;
เอสแซค
กรณี $CATALINA_BASE ใน
  *:*) echo "ใช้ CATALINA_BASE: $CATALINA_BASE";
       echo "ไม่สามารถเริ่มต้นได้เนื่องจาก CATALINA_BASE มีอักขระโคลอน (:)";
       ทางออก 1;
เอสแซค

#สำหรับOS400
ถ้า $os400; แล้ว
  # กำหนดลำดับความสำคัญของงานเป็นมาตรฐานสำหรับการโต้ตอบ (โต้ตอบ - 6) โดยใช้
  # ลำดับความสำคัญแบบโต้ตอบ - 6 เธรดตัวช่วยที่ตอบสนองต่อคำขอ
  # จะทำงานด้วยลำดับความสำคัญเดียวกันกับงานแบบโต้ตอบ
  COMMAND='chgjob job('$JOBNAME') runpty(6)'
  ระบบ $COMMAND

  # เปิดใช้งานหลายเธรด
  ส่งออก 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="$CLASSPATH":
ไฟ
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 ใน classpath
# tomcat-juli.jar สามารถถูก over-ridden ต่ออินสแตนซ์
ถ้า [ -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: เมื่อไม่มี TTY อย่าส่งออกไปยังคอนโซล
have_tty=0
ถ้า [ -t 0 ]; แล้ว
    have_tty=1
ไฟ

# สำหรับ Cygwin ให้เปลี่ยนเส้นทางเป็นรูปแบบ Windows ก่อนเรียกใช้จาวา
ถ้า $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 --หน้าต่าง "$CATALINA_BASE"`
  CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
  CLASSPATH=`cygpath --path --หน้าต่าง "$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" ]; แล้ว
    UMASK="0027"
ไฟ
อูมาสก์ $UMASK

# Java 9 ไม่รองรับ java.endorsed.dirs อีกต่อไป
#คุณสมบัติของระบบ ลองใช้เฉพาะในกรณีที่
# JAVA_ENDORSED_DIRS ถูกตั้งค่าอย่างชัดเจน
# หรือ CATALINA_HOME/รับรองอยู่
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=ALL-UNNAMED"
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.io=ALL-UNNAMED"
JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"
ส่งออก JDK_JAVA_OPTIONS

# ----- ดำเนินการคำสั่งที่ร้องขอ ---------------------------------------- -

# Bugzilla 37848: ส่งออกสิ่งนี้ก็ต่อเมื่อเรามี TTY
ถ้า [ $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" ]; แล้ว
    เสียงสะท้อน "ใช้ CATALINA_PID: $CATALINA_PID"
  ไฟ
ไฟ

ถ้า [ "$1" = "jpda" ] ; แล้ว
  ถ้า [ -z "$JPDA_TRANSPORT" ]; แล้ว
    JPDA_TRANSPORT="dt_socket"
  ไฟ
  ถ้า [ -z "$JPDA_ADDRESS" ]; แล้ว
    JPDA_ADDRESS="localhost:8000"
  ไฟ
  ถ้า [ -z "$JPDA_SUSPEND" ]; แล้ว
    JPDA_SUSPEND="n"
  ไฟ
  ถ้า [ -z "$JPDA_OPTS" ]; แล้ว
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  ไฟ
  CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
  กะ
ไฟ

# สิ่งที่ต้องทำ: Bugzilla 63815
# ขณะนี้ใช้งานไม่ได้ (และไม่สามารถใช้งานได้) หากค่าที่ใช้ใน
# CATALINA_OPTS และ/หรือ JAVA_OPTS ต้องมีการอ้างอิง ดู:
# https://bugs.openjdk.java.net/browse/JDK-8234808
ถ้า [ "$1" = "แก้ปัญหา" ] ; แล้ว
  ถ้า $os400; แล้ว
    echo "ไม่มีคำสั่ง Debug บน OS400"
    ทางออก 1
  อื่น
    กะ
    ถ้า [ "$1" = "-ความปลอดภัย" ] ; แล้ว
      ถ้า [ $have_tty -eq 1 ]; แล้ว
        echo "ใช้ Security Manager"
      ไฟ
      กะ
      ผู้บริหาร "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
        -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
        -คลาสพาธ "$CLASSPATH" \
        -แหล่งที่มา "$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 "$@" เริ่มต้น
    อื่น
      ผู้บริหาร "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
        -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \
        -คลาสพาธ "$CLASSPATH" \
        -เส้นทางแหล่งที่มา "$CATALINA_HOME"/../../java \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" เริ่มต้น
    ไฟ
  ไฟ

elif [ "$1" = "รัน" ]; แล้ว

  กะ
  ถ้า [ "$1" = "-ความปลอดภัย" ] ; แล้ว
    ถ้า [ $have_tty -eq 1 ]; แล้ว
      echo "ใช้ Security Manager"
    ไฟ
    กะ
    eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -คลาสพาธ "\"$CLASSPATH\"" \
      -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\"" \
      -คลาสพาธ "\"$CLASSPATH\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap "$@" เริ่มต้น
  ไฟ

elif [ "$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
          ถ้า [ $? -eq 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 ]; แล้ว
      echo "ใช้ Security Manager"
    ไฟ
    กะ
    eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER "$JAVA_OPTS" "$CATALINA_OPTS" \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -คลาสพาธ "\"$CLASSPATH\"" \
      -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\"" \
      -คลาสพาธ "\"$CLASSPATH\"" \
      -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" ]; แล้ว
    สะท้อน $! > "$CATALINA_PID"
  ไฟ

  echo "Tomcat เริ่มต้น"

elif [ "$1" = "หยุด" ] ; แล้ว

  กะ

  นอน=5
  ถ้า [ ! -z "$1" ]; แล้ว
    เสียงสะท้อน $1 | grep "[^0-9]" >/dev/null 2>&1
    ถ้า [ $? -gt 0 ]; แล้ว
      นอน = 1 ดอลลาร์
      กะ
    ไฟ
  ไฟ

  แรง = 0
  ถ้า [ "$1" = "-บังคับ" ]; แล้ว
    กะ
    แรง = 1
  ไฟ

  ถ้า [ ! -z "$CATALINA_PID" ]; แล้ว
    ถ้า [ -f "$CATALINA_PID" ]; แล้ว
      ถ้า [ -s "$CATALINA_PID" ]; แล้ว
        ฆ่า -0 `cat "$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\"" \
    -คลาสพาธ "\"$CLASSPATH\"" \
    -Dcatalina.base="\"$CATALINA_BASE\"" \
    -Dcatalina.home="\"$CATALINA_HOME\"" \
    -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
    org.apache.catalina.startup.Bootstrap "$@" หยุด

  # หยุดล้มเหลว ปิดใช้งานพอร์ตปิดเครื่องหรือไม่ ลองฆ่าธรรมดา
  ถ้า [ $? != 0 ]; แล้ว
    ถ้า [ ! -z "$CATALINA_PID" ]; แล้ว
      echo "คำสั่งหยุดล้มเหลว กำลังพยายามส่งสัญญาณให้กระบวนการหยุดผ่านสัญญาณระบบปฏิบัติการ"
      ฆ่า -15 `cat "$CATALINA_PID"` >/dev/null 2>&1
    ไฟ
  ไฟ

  ถ้า [ ! -z "$CATALINA_PID" ]; แล้ว
    ถ้า [ -f "$CATALINA_PID" ]; แล้ว
      ในขณะที่ [ $SLEEP -ge 0 ]; ทำ
        ฆ่า -0 `cat "$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 "Tomcat หยุด"
          หยุดพัก
        ไฟ
        ถ้า [ $SLEEP -gt 0 ]; แล้ว
          นอน1
        ไฟ
        ถ้า [ $SLEEP -eq 0 ]; แล้ว
          echo "แมวตัวผู้ไม่หยุดเวลา"
          ถ้า [ $FORCE -eq 0 ]; แล้ว
            echo "ไม่ได้ลบไฟล์ PID"
          ไฟ
          echo "เพื่อช่วยในการวินิจฉัย เธรดดัมพ์ได้ถูกเขียนเป็นมาตรฐาน"
          ฆ่า -3 `cat "$CATALINA_PID"`
        ไฟ
        SLEEP=`expr $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 ]; ทำ
            ฆ่า -0 `cat "$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 ยังไม่ถูกฆ่าโดยสมบูรณ์ กระบวนการอาจกำลังรอการเรียกของระบบบางอย่างหรืออาจไม่สามารถแก้ไขได้"
        ไฟ
      ไฟ
    ไฟ
  ไฟ

elif [ "$1" = "configtest" ] ; แล้ว

    eval "\"$_RUNJAVA\"" $LOGGING_MANAGER "$JAVA_OPTS" \
      -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
      -คลาสพาธ "\"$CLASSPATH\"" \
      -Dcatalina.base="\"$CATALINA_BASE\"" \
      -Dcatalina.home="\"$CATALINA_HOME\"" \
      -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
      org.apache.catalina.startup.Bootstrap configtest
    ผลลัพธ์=$?
    ถ้า [ $result -ne 0 ]; แล้ว
        echo "ตรวจพบข้อผิดพลาดในการกำหนดค่า!"
    ไฟ
    ออกจากผลลัพธ์ $

elif [ "$1" = "เวอร์ชัน" ] ; แล้ว

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

อื่น

  echo "การใช้งาน: catalina.sh ( คำสั่ง ... )"
  echo "คำสั่ง:"
  ถ้า $os400; แล้ว
    echo " debug Start Catalina ใน debugger (ไม่มีใน OS400)"
    echo " debug -security Debug Catalina ด้วยตัวจัดการความปลอดภัย (ไม่มีใน OS400)"
  อื่น
    echo " ดีบัก เริ่ม Catalina ในดีบักเกอร์"
    echo " debug -security Debug Catalina ด้วยตัวจัดการความปลอดภัย"
  ไฟ
  echo " jpda start เริ่ม Catalina ภายใต้ดีบักเกอร์ JPDA"
  echo " เรียกใช้ Start Catalina ในหน้าต่างปัจจุบัน"
  echo " run -security เริ่มในหน้าต่างปัจจุบันด้วยตัวจัดการความปลอดภัย"
  echo " start เริ่ม Catalina ในหน้าต่างแยก"
  echo " start -security เริ่มในหน้าต่างแยกต่างหากด้วยตัวจัดการความปลอดภัย"
  echo " หยุด หยุด Catalina รอถึง 5 วินาทีเพื่อให้กระบวนการสิ้นสุด"
  echo " หยุด n หยุด Catalina รอถึง n วินาทีเพื่อให้กระบวนการสิ้นสุด"
  echo " stop -force หยุด Catalina รอ 5 วินาที แล้วใช้ kill -KILL ถ้ายังทำงานอยู่"
  echo " stop n -force หยุด Catalina รอไม่เกิน n วินาที จากนั้นใช้ kill -KILL ถ้ายังทำงานอยู่"
  echo " configtest เรียกใช้การตรวจสอบไวยากรณ์พื้นฐานบน server.xml - ตรวจสอบรหัสทางออกสำหรับผลลัพธ์"
  echo " version คุณกำลังใช้ 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 flag
ใครก็ได้ตอบที

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา