Mengontrol kucing jantan dengan atasan


14

Apakah ada cara untuk "anggun" mematikan kucing jantan saat mengendalikan melalui penyelia?

Pemahaman saya adalah skrip shutdown.sh Tomcat berbicara untuk tomcat pada port shutdown untuk memulai shutdown yang anggun. Supervisor tampaknya tidak memiliki cara untuk menentukan "perintah" shutdown, hanya menggunakan sinyal.

Adakah yang berhasil menggunakan penyelia dengan kucing jantan?

Juga, karena skrip startup.sh tomcat memulai proses java, saya telah menyalin perintah java yang dihasilkan langsung ke supervisor, tetapi ini tidak sebaik menggunakan skrip startup.sh karena semua pengaturan lingkungan. Apakah ada cara untuk meminta penyelia menggunakan skrip startup.sh tetapi masih melacak proses java anak yang dihasilkan?

Jawaban:


6

Terima kasih kepada Mark untuk tautan ke skrip itu; di sini adalah contoh kerja saya untuk 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`

Dan inilah yang saya gunakan di /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

Berjalan, tampilannya seperti ini:

[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

Saya awalnya mencoba menambahkan variabel lingkungan ke /etc/supervisord.conf melalui environmentarahan, tetapi mengalami masalah dengan JAVA_OPTS, dengan semua spasi dan tanda sama dengan. Menempatkannya di skrip pembungkus merawat itu.

Semoga ini bisa membantu menghemat waktu orang lain!


1
Saya dapat mengkonfirmasi bahwa ini bekerja dengan Tomcat 7 di supervisord v3.0 pada CentOS 6. Perhatikan bahwa startpada akhir perintah di /etc/supervisord.conf adalah argumen yang tidak perlu karena skrip tidak melakukan apa-apa dengannya.
Rick Hanlon II

Hah, terima kasih atas tangkapannya! Saya biasa menyampaikannya ke catalina.sh. Saya sudah menghapusnya.
Aaron R.

20

Ada perintah "jalankan" di catalina.sh. Ini berfungsi dengan baik dengan supervisor:

[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 dijalankan sebagai "catalina.sh run" bekerja di latar depan, memiliki pid yang benar dan menerima sinyal. Bekerja dengan sangat baik dengan supervisor.


1
Ini harus menjadi jawaban yang diterima.
MaratC

Saya mendapatkan "Tidak dapat memulai server. Server contoh tidak dikonfigurasi"
xtian

0

Supervisor tampaknya tidak memiliki cara untuk menentukan "perintah" shutdown, hanya menggunakan sinyal.

Sudahkah Anda mencoba menggunakannya 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

sepertinya QUIT menyebabkan tomcat melakukan thread dump ke log catalina.out (alias konsol).
Markus

1
Ini adalah saran yang menarik: confluence.atlassian.com/plugins/viewsource/… - Pada dasarnya bungkus catalina.sh dalam sebuah skrip dan instal fungsi trap untuk shutdown ...
Tandai

@Ark ini untuk launchd di OSX, bagaimana bisa diadaptasi untuk supervisor?
Conrad.Dean

1
Atasan Conrad.Dean menggunakan asumsi yang sama. Skrip yang sama berfungsi untuk penyelia tanpa modifikasi
Tandai
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.