ฉันมีเซิร์ฟเวอร์ 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"