การควบคุมแมวตัวผู้กับหัวหน้างาน


14

มีวิธีการ "ปิด" แมวเหมียวปิดเมื่อควบคุมผ่านหัวหน้างานหรือไม่?

ความเข้าใจของฉันคือสคริปต์การปิดระบบของ Tomcat พูดคุยกับ Tomcat ที่พอร์ตการปิดระบบเพื่อเริ่มต้นการปิดระบบที่สง่างาม ผู้ควบคุมดูเหมือนจะไม่มีวิธีระบุคำสั่ง "ปิดระบบ" โดยใช้สัญญาณเท่านั้น

มีใครเคยใช้ผู้ควบคุมดูแลกับ Tomcat สำเร็จหรือไม่

นอกจากนี้เนื่องจากสคริปต์ startup.sh ของ tomcat เริ่มต้นกระบวนการ java ฉันได้คัดลอกคำสั่ง java ที่เป็นผลลัพธ์โดยตรงไปยังหัวหน้างาน แต่สิ่งนี้ไม่ดีเท่ากับการใช้สคริปต์ startup.sh เนื่องจากการตั้งค่าสภาพแวดล้อมทั้งหมด มีวิธีรับผู้ดูแลระบบให้ใช้สคริปต์ startup.sh แต่ยังคงติดตามกระบวนการ java child ที่เกิดขึ้นหรือไม่?

คำตอบ:


6

ขอบคุณ Mark สำหรับลิงก์ไปยังสคริปต์นั้น นี่คือตัวอย่างการทำงานของฉันสำหรับ CentOS:

#!/bin/bash
# Source: https://confluence.atlassian.com/plugins/viewsource/viewpagesrc.action?pageId=252348917
function shutdown()
{
    date
    echo "Shutting down Tomcat"
    unset CATALINA_PID # Necessary in some cases
    unset LD_LIBRARY_PATH # Necessary in some cases
    unset JAVA_OPTS # Necessary in some cases

    $TOMCAT_HOME/bin/catalina.sh stop
}

date
echo "Starting Tomcat"
export CATALINA_PID=/tmp/$$
export JAVA_HOME=/usr/local/java
export LD_LIBRARY_PATH=/usr/local/apr/lib
export JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.password.file=/etc/tomcat.jmx.pwd -Dcom.sun.management.jmxremote.access.file=/etc/tomcat.jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Xms128m -Xmx3072m -XX:MaxPermSize=256m"

# Uncomment to increase Tomcat's maximum heap allocation
# export JAVA_OPTS=-Xmx512M $JAVA_OPTS

. $TOMCAT_HOME/bin/catalina.sh start

# Allow any signal which would kill a process to stop Tomcat
trap shutdown HUP INT QUIT ABRT KILL ALRM TERM TSTP

echo "Waiting for `cat $CATALINA_PID`"
wait `cat $CATALINA_PID`

และนี่คือสิ่งที่ฉันใช้ใน /etc/supervisord.conf:

[program:tomcat]
directory=/usr/local/tomcat
command=/usr/local/tomcat/bin/supervisord_wrapper.sh
stdout_logfile=syslog
stderr_logfile=syslog
user=apache

ทำงานดูเหมือนว่านี้:

[root@qa1.qa:~]# supervisorctl start tomcat
tomcat: started
[root@qa1.qa:~]# supervisorctl status
tomcat                           RUNNING    pid 9611, uptime 0:00:03
[root@qa1.qa:~]# ps -ef|grep t[o]mcat
apache    9611  9581  0 13:09 ?        00:00:00 /bin/bash /usr/local/tomcat/bin/supervisord_wrapper.sh start
apache    9623  9611 99 13:09 ?        00:00:10 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.password.file=/etc/tomcat.jmx.pwd -Dcom.sun.management.jmxremote.access.file=/etc/tomcat.jmxremote.access -Dcom.sun.management.jmxremote.ssl=false -Xms128m -Xmx3072m -XX:MaxPermSize=256m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

ฉันพยายามเพิ่มตัวแปรสภาพแวดล้อมเหล่านั้นลงใน /etc/supervisord.conf ผ่านenvironmentคำสั่ง แต่พบปัญหากับ JAVA_OPTS โดยมีช่องว่างและเครื่องหมายเท่ากับ วางไว้ในสคริปต์เสื้อคลุมดูแลที่

หวังว่านี่จะช่วยคนอื่นให้รอดในบางครั้ง!


1
ฉันสามารถยืนยันได้ว่าการทำงานกับ Tomcat 7 ใน supervisord v3.0 บน CentOS 6 โปรดทราบว่าstartในตอนท้ายของคำสั่งใน /etc/supervisord.conf เป็นอาร์กิวเมนต์ที่ไม่จำเป็นเนื่องจากสคริปต์ไม่ได้ทำอะไรเลย
Rick Hanlon II

ขอบคุณสำหรับการจับ! ฉันเคยผ่านมันไปที่ catalina.sh ฉันลบมันแล้ว
แอรอนอาร์

20

มีคำสั่ง "เรียกใช้" ใน catalina.sh มันทำงานได้ดีอย่างสมบูรณ์แบบกับหัวหน้างาน:

[program:tomcat]
command=/path/to/tomcat/bin/catalina.sh run
process_name=%(program_name)s
startsecs=5
stopsignal=INT
user=tomcat
redirect_stderr=true
stdout_logfile=/var/log/tomcat.log

Tomcat ทำงานเป็น "catalina.sh run" ทำงานเบื้องหน้ามี pid ที่ถูกต้องและรับสัญญาณ ทำงานได้อย่างสมบูรณ์แบบกับหัวหน้างาน


1
นี่ควรเป็นคำตอบที่ยอมรับได้
MaratC

ฉันได้รับ "ไม่สามารถเริ่มเซิร์ฟเวอร์ไม่มีการกำหนดค่าอินสแตนซ์ของเซิร์ฟเวอร์"
xtian

0

ผู้ควบคุมดูเหมือนจะไม่มีวิธีระบุคำสั่ง "ปิดระบบ" โดยใช้สัญญาณเท่านั้น

คุณเคยลองใช้stopsignal=QUITไหม?

[program:tomcat]
command=java ...
process_name=tomcat
priority=150
startsecs=10
directory=./
stopsignal=QUIT
stdout_logfile=./logs/tomcat.log
stderr_logfile=./logs/tomcat.err

ดูเหมือนว่า QUIT ทำให้ Tomcat ทำการเธรดการถ่ายโอนข้อมูลไปยังบันทึก catalina.out (คอนโซลอาคา)
Mark

1
นี่คือคำแนะนำที่น่าสนใจ: confluence.atlassian.com/plugins/viewsource/… - ห่อ catalina.sh เป็นหลักในสคริปต์และติดตั้งฟังก์ชั่นกับดักสำหรับการปิด ...
Mark

@ ทำเครื่องหมายนี้ไว้สำหรับ launchd บน OSX จะสามารถปรับให้เหมาะสมกับหัวหน้างานได้อย่างไร?
Conrad.Dean

1
@ Conrad.Dean หัวหน้างานใช้สมมติฐานเดียวกัน สคริปต์เดียวกันนี้ใช้งานได้กับหัวหน้างานโดยไม่มีการแก้ไข
Mark
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.