Kiểm soát tomcat với người giám sát


14

Có cách nào để "tắt" tomcat một cách duyên dáng khi điều khiển thông qua người giám sát không?

Sự hiểu biết của tôi là kịch bản shutdown.sh của Tomcat nói chuyện với tomcat trên cổng tắt máy để bắt đầu tắt máy duyên dáng. Người giám sát dường như không có cách nào để chỉ định "lệnh" tắt máy, chỉ sử dụng tín hiệu.

Có ai đã sử dụng thành công giám sát với tomcat chưa?

Ngoài ra, do tập lệnh startup.sh của tomcat khởi tạo quy trình java, tôi đã sao chép trực tiếp lệnh java kết quả vào trình giám sát, nhưng điều này không tốt bằng sử dụng tập lệnh startup.sh vì tất cả các thiết lập môi trường. Có cách nào để người giám sát sử dụng tập lệnh startup.sh nhưng vẫn theo dõi quá trình java con kết quả không?

Câu trả lời:


6

Cảm ơn Mark cho liên kết đến kịch bản đó; đây là ví dụ hoạt động của tôi cho 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`

Và đây là những gì tôi đã sử dụng trong /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

Chạy, nó trông như thế này:

[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

Ban đầu, tôi đã cố gắng thêm các biến môi trường đó vào /etc/supervisord.conf thông qua environmentchỉ thị, nhưng gặp rắc rối với JAVA_OPTS, với tất cả các khoảng trắng và dấu bằng. Đặt nó trong tập lệnh bao bọc đã chăm sóc điều đó.

Hy vọng điều này sẽ giúp tiết kiệm thời gian của người khác!


1
Tôi có thể xác nhận rằng điều này hoạt động với Tomcat 7 trong giám sát v3.0 trên CentOS 6. Lưu ý rằng startở cuối lệnh trong /etc/supervisord.conf là một đối số không cần thiết vì tập lệnh không làm gì với nó.
Rick Hanlon II

Hah, cảm ơn vì đã bắt! Tôi đã từng chuyển nó cùng với catalina.sh. Tôi đã loại bỏ nó.
Aaron R.

20

Có một lệnh "chạy" trong catalina.sh. Nó hoạt động hoàn toàn tốt với người giám sát:

[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 chạy như "catalina.sh run" hoạt động ở nền trước, có pid chính xác và chấp nhận tín hiệu. Hoạt động hoàn toàn tốt với giám sát.


1
Đây phải là một câu trả lời được chấp nhận.
MaratC

Tôi nhận được "Không thể khởi động máy chủ.
Phiên bản

0

Người giám sát dường như không có cách nào để chỉ định "lệnh" tắt máy, chỉ sử dụng tín hiệu.

Bạn đã thử sử dụng 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

có vẻ như QUIT khiến tomcat thực hiện kết xuất luồng vào nhật ký catalina.out (còn gọi là console).
Đánh dấu

1
Đây là một gợi ý thú vị: confluence.atlassian.com/plugins/viewource/ cấp - Về cơ bản bọc catalina.sh trong một tập lệnh và cài đặt chức năng bẫy để tắt máy ...
Đánh dấu

@Mark đây là cho launchd trên OSX, làm thế nào nó có thể được điều chỉnh cho người giám sát?
Conrad.Dean

1
@ Conrad.Dean giám sát viên sử dụng các giả định tương tự. Kịch bản tương tự hoạt động cho người giám sát không có sửa đổi
Đánh dấu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.