수퍼바이저로 Tomcat 제어


14

관리자를 통해 제어 할 때 바람둥이를 "정상적으로"종료하는 방법이 있습니까?

내 이해는 Tomcat의 shutdown.sh 스크립트가 종료 포트에서 Tomcat과 통신하여 정상적인 종료를 시작한다는 것입니다. Supervisor는 신호 만 사용하여 종료 "명령"을 지정하는 방법이없는 것 같습니다.

Tomcat과 함께 관리자를 성공적으로 사용한 사람이 있습니까?

또한 tomcat의 startup.sh 스크립트가 Java 프로세스를 시작하기 때문에 결과 java 명령을 관리자에게 직접 복사했지만 모든 환경 설정으로 인해 startup.sh 스크립트를 사용하는 것만 큼 좋지 않습니다. 수퍼바이저가 startup.sh 스크립트를 사용하도록하지만 결과적으로 자식 Java 프로세스를 추적 할 수있는 방법이 있습니까?

답변:


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

처음에는 environment지시문을 통해 해당 환경 변수를 /etc/supervisord.conf에 추가하려고 시도했지만 모든 공백과 등호가있는 JAVA_OPTS에 문제가 발생했습니다. 래퍼 스크립트에 넣는 것이 그것을 처리했습니다.

이것이 다른 누군가를 구하는 데 도움이되기를 바랍니다.


1
CentOS 6의 supervisord v3.0에서 Tomcat 7과 함께 작동 함을 확인할 수 있습니다 start. /etc/supervisord.conf의 명령 끝에는 스크립트가 아무 것도 수행하지 않으므로 불필요한 인수입니다.
Rick Hanlon II

아, 잡아 줘서 고마워! 나는 그것을 catalina.sh에 전달했습니다. 나는 그것을 제거했다.
Aaron R.

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

"catalina.sh run"으로 실행되는 Tomcat은 포 그라운드에서 작동하며 올바른 pid를 가지며 신호를 받아들입니다. 감독자와 완벽하게 작동합니다.


1
이것은 정답입니다.
MaratC

"서버를 시작할 수 없습니다. 서버 인스턴스가 구성되지 않았습니다"
xtian

0

Supervisor는 신호 만 사용하여 종료 "명령"을 지정하는 방법이없는 것 같습니다.

사용하려고 했습니까 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

@ OSX에서 시작된 것으로 표시합니다. 감독자에게 어떻게 적용 할 수 있습니까?
Conrad.Dean

1
@ Conrad.Dean 관리자는 동일한 가정을 사용합니다. 동일한 스크립트가 수정없이 감독자에게도 작동합니다
Mark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.