수퍼바이저로 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.