ฉันกำลังเขียนสคริปต์ทุบตีอย่างง่ายเพื่อปิด Tomcat และถ้ามันไม่หยุดอย่างราบรื่น ให้ตรวจสอบว่า PID ของ Tomcat ยังคงอยู่หรือไม่และฆ่ามัน
ฉันส่งชื่อแมวตัวผู้เป็นตัวแปรให้กับสคริปต์ดังต่อไปนี้ ในบางกรณี ฉันส่งชื่อแมวตัวผู้สองหรือสามชื่อ ซึ่งเป็นสาเหตุที่การใช้ FOR LOOP ด้านล่าง
./shutdown.sh tomcat1
เนื้อหาของสคริปต์ Shutdown.sh
#!/bin/bash
สำหรับชื่อใน "$@"
ทำ
ทุบตี /opt/$name/bin/shutdown.sh
เสร็จแล้ว
นอน 30
สำหรับชื่อใน "$@"
ทำ
process_id=`ps -ef | grep $ชื่อ | grep -v grep | awk '{ พิมพ์ $2 }'`
ถ้า [ $process_id ]
แล้ว
ฆ่า -9 $process_id
ไฟ
เสร็จแล้ว
echo " Script Execution เสร็จสิ้น"
เมื่อ Tomcat ปิดตัวลงอย่างสง่างามก็ไม่มีปัญหา แต่เมื่อแมวตัวผู้ไม่หยุด ผมก็มีปัญหา
ด้านล่างโค้ดเมื่อรันโดยตรงบนพรอมต์คำสั่งจะให้ ID กระบวนการที่ถูกต้อง (62457) ของ Tomcat แต่ส่วนเดียวกันในเชลล์สคริปต์ให้รหัสกระบวนการสามรหัสแก่ฉัน (62610,62611,62457)
process_id=`ps -ef | grep $ชื่อ | grep -v grep | awk '{ พิมพ์ $2 }'`
คุณช่วยบอกฉันได้ไหมว่าทำไมฉันถึงได้รับ ID กระบวนการสามรหัสในสคริปต์เมื่อเทียบกับรหัสเดียว
มีคำแนะนำอื่นที่ง่ายกว่าในการฆ่าไหม