Tomcat'i süpervizör ile kontrol etme


14

Süpervizör ile kontrol ederken tomcat'i "incelikle" kapatmanın bir yolu var mı?

Anladığım kadarıyla Tomcat'in shutdown.sh betiği, zarif bir kapatma başlatmak için kapatma bağlantı noktasında tomcat ile konuşuyor. Süpervizörün sadece sinyalleri kullanarak bir kapatma "komutu" belirlemesinin bir yolu yok gibi görünüyor.

Tomcat ile amiri başarıyla kullanan var mı?

Ayrıca, tomcat'ın startup.sh betiği java işlemini başlattığından, ortaya çıkan java komutunu doğrudan süpervizöre kopyaladım, ancak bu, tüm ortam kurulumu nedeniyle startup.sh betiğini kullanmak kadar güzel değil. Supervisor'ın startup.sh komut dosyasını kullanmasını ancak yine de sonuçta ortaya çıkan java işlemini izlemenin bir yolu var mı?

Yanıtlar:


6

Bu komut dosyasının bağlantısı için Mark'a teşekkürler; İşte CentOS için çalışma örneğim:

#!/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`

Ve /etc/supervisord.conf dosyasında kullandığım:

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

Çalışıyor, şöyle görünüyor:

[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

Başlangıçta bu ortam değişkenlerini environmentyönerge aracılığıyla /etc/supervisord.conf dosyasına eklemeye çalıştım , ancak JAVA_OPTS ile tüm boşluklar ve eşit işaretlerle sorun yaşadı. Sarma betiğine koymak bunu halletti.

Umarım bu biraz zaman kazanır!


1
Bunun CentOS 6'daki yönetici v3.0 startsürümünde Tomcat 7 ile çalıştığını onaylayabilirim .
Rick Hanlon II

Hah, yakaladığınız için teşekkürler! Bunu catalina.sh'ye geçirirdim. Kaldırdım.
Aaron R.

20

Catalina.sh dosyasında bir "run" komutu var. Süpervizörle mükemmel çalışır:

[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" olarak çalışan tomcat ön planda çalışır, doğru pid'e sahiptir ve sinyalleri kabul eder. Süpervizörle mükemmel çalışır.


1
Bu kabul edilmiş bir cevap olmalı.
MaratC

"Sunucu başlatılamıyor. Sunucu örneği yapılandırılmadı"
8

0

Süpervizörün sadece sinyalleri kullanarak bir kapatma "komutu" belirlemesinin bir yolu yok gibi görünüyor.

Kullanmaya çalıştınız mı 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'in catalina.out günlüğüne (diğer adıyla konsol) bir iş parçacığı dökümü yapmasına neden oluyor gibi görünüyor.
Mark

1
Bu ilginç bir öneri: confluence.atlassian.com/plugins/viewsource/… - Temelde catalina.sh dosyasını bir komut dosyasına sarın ve kapatma için bir tuzak işlevi yükleyin ...
Mark

@ Bu OSX'te lansman için işaretleyin, amir için nasıl uyarlanabilir?
Conrad.Dean

1
@ Conrad.Dean süpervizörü aynı varsayımları kullanır. Aynı senaryo, hiçbir değişiklik yapmadan süpervizör için çalışır
Mark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.