Saya perlu memeriksa apakah Tomcat berjalan di sistem saya melalui skrip shell. Jika tidak, saya perlu menangkap id proses dan mematikan Tomcat. Bagaimana cara mencapainya?
untuk mendapatkan proses yang berjalan, saya menggunakan perintah ini:
ps x | grep [full_path_to_tomcat] | grep -v grep | cut -d ' ' -f 1
Namun, Anda harus berhati-hati. Ini bekerja pada pengaturan saya, tetapi mungkin tidak berjalan di semua tempat... Saya memiliki dua instalasi tomcat, satu di /usr/local/tomcat pada port 8080 dan /usr/local/tomcat_8081 pada port 8081. Saya harus menggunakan '/usr/local/tomcat/' (dengan garis miring terakhir) sebagai full_path karena jika tidak, maka akan mengembalikan 2 pid yang berbeda jika tomcat_8081 juga berjalan.
Berikut adalah penjelasan tentang apa yang dilakukan perintah ini:
ps x
memberi Anda daftar proses yang sedang berjalan yang diurutkan berdasarkan pid, tty, stat, waktu berjalan, dan perintah.
Menerapkan grep [full_path_to_tomcat]
padanya akan menemukan pola [full_path_to_tomcat] di dalam daftar itu. Sebagai contoh, menjalankan ps x | grep /usr/local/tomcat/
mungkin akan memberikan Anda hasil sebagai berikut:
13277 ? Sl 7:13 /usr/local/java/bin/java -Djava.util.logging.config.fil
e=/usr/local/tomcat/conf/logging.properties [...] -Dcatalina.home=/usr/local/tomca
t [...]
21149 pts/0 S+ 0:00 grep /usr/local/tomcat/
grep /usr/local/tomcat/
yang cocok dengan pola tersebut, mari kita hapus. -v
adalah flag invert-match untuk grep, yang berarti hanya akan memilih baris yang tidak cocok dengan pola. Jadi, pada contoh sebelumnya, menggunakan ps -x | grep /usr/local/tomcat/ | grep -v grep
akan mengembalikan:13277 ? Sl 7:13 /usr/local/java/bin/java -Djava.util.logging.config.fil
e=/usr/local/tomcat/conf/logging.properties [...] -Dcatalina.home=/usr/local/tomca
t [...]
cut
. Perintah ini menghapus bagian dari sebuah FILE atau output standar. Opsi -d adalah pembatas dan -f adalah bidang yang Anda butuhkan. Bagus. Jadi kita dapat menggunakan spasi (' ') sebagai pembatas, dan mendapatkan field pertama, yang sesuai dengan pid. Menjalankan ps x | grep /usr/local/tomcat/ | grep -v grep | cut -d ' ' -f 1
akan mengembalikan:13277
Itulah yang Anda butuhkan. Untuk menggunakannya dalam skrip Anda, caranya sederhana:
#replace below with your tomcat path
tomcat_path=/users/tomcat/apache-tomcat-8.0.30
pid=$(ps x | grep "${tomcat_path}" | grep -v grep | cut -d ' ' -f 1)
if [ "${pid}" ]; then
eval "kill ${pid}"
fi
cara mudah untuk melakukannya adalah:
ps -ef | grep tomcat
dengan menggunakan perintah ini, Anda akan mendapatkan:
user [id-to-kill] Date [tomcat-path]
langkah terakhir adalah mematikan proses
sudo kill -9 [id-to-kill]
Selamat, proses Anda telah selesai.
Port default Tomcat adalah 8080. Anda dapat melakukan grep dan menggunakan status port dalam loop perbandingan.
#!/bin/bash
STAT=`netstat -na | grep 8080 | awk '{print $7}'`
if [ "$STAT" = "LISTEN" ]; then
echo "DEFAULT TOMCAT PORT IS LISTENING, SO ITS OK"
elif [ "$STAT" = "" ]; then
echo "8080 PORT IS NOT IN USE SO TOMCAT IS NOT WORKING"
## only if you defined CATALINA_HOME in JAVA ENV ##
cd $CATALINA_HOME/bin
./startup.sh
fi
RESULT=`netstat -na | grep 8080 | awk '{print $7}' | wc -l`
if [ "$RESULT" = 0 ]; then
echo "TOMCAT PORT STILL NOT LISTENING"
elif [ "$RESULT" != 0 ]; then
echo "TOMCAT PORT IS LISTENINS AND SO TOMCAT WORKING"
fi
dengan cara ini Anda dapat membandingkan script.you grep port 8080 jika Anda menggunakan port default untuk tomcat.this hanya akan memeriksa apakah tomcat sedang berjalan. maka Anda dapat memeriksa proses yang menggunakan port tersebut lsof -i:8080 //jika menggunakan port 8080
jika anda ingin mengosongkan port dengan membunuh proses yang menggunakan port tersebut gunakan perintah ini kill 75782 //jika misalnya 75782 adalah proses yang menggunakan port tersebut