Score:0

Shell Scripting - รหัสกระบวนการหลายตัวแทนที่จะเป็นรหัสเดียว

ธง cn

ฉันกำลังเขียนสคริปต์ทุบตีอย่างง่ายเพื่อปิด 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 กระบวนการสามรหัสในสคริปต์เมื่อเทียบกับรหัสเดียว

มีคำแนะนำอื่นที่ง่ายกว่าในการฆ่าไหม

Josh Zhang avatar
ph flag
แทนที่จะวนซ้ำ PID ที่เป็นไปได้ ทำไมคุณไม่ลองไพพ์ผลลัพธ์เป็น `xargs kill -9` ล่ะ IE: `ps -ef | grep $ชื่อ | grep -v grep | awk '{ พิมพ์ $2 }' | xargs ฆ่า -9`
Raj K avatar
cn flag
ฉันยังไม่ได้ทดสอบ แต่สงสัย ในสถานการณ์ที่ Tomcat ปิดตัวลงอย่างสวยงามและไม่มี PID ให้ KILL โดยพื้นฐานแล้วจะไม่มีการป้อนคำสั่ง "xargs" คำสั่ง xargs จะบ่นถึงข้อผิดพลาดทางไวยากรณ์หรือไม่
Josh Zhang avatar
ph flag
หากไม่มี PID สำหรับ `xargs kill -9` คุณจะได้รับข้อผิดพลาดจาก `kill` เนื่องจากมันจะเหมือนกับการรันคำสั่งโดยไม่มี PID ใดๆ
Brandon Xavier avatar
us flag
คำสั่ง process_id ของคุณจะรวมคำสั่ง `./shutdown.sh` ไว้ด้วย คุณสามารถเพิ่ม grep อื่นในไปป์ไลน์เช่น ` . .| grep -v shutdown.sh | grep -v grep . .` หรือทำบางอย่างเช่น ` . . . | egrep -v 'grep|shutdown.sh' . . .`
John Mahowald avatar
cn flag
ระบบปฏิบัติการของคุณมีสคริปต์เริ่มต้นหรือระบบตัวจัดการบริการทั่วไปหรือไม่ การทำอย่างถูกต้องในเชลล์นั้นไม่สำคัญอย่างที่คิด
Raj K avatar
cn flag
@BrandonXavier ` | grep -v shutdown.sh | grep -v grep ` ทำงาน ขอขอบคุณ.
Piotr P. Karwasz avatar
by flag
หากคุณตั้งค่า `CATALINA_PID` เมื่อเริ่มต้น Tomcat ดังนั้น `shutdown.sh 30 -force` จะทำสิ่งเดียวกันกับสคริปต์ของคุณทุกประการ (แต่ถูกต้องกว่า) เปรียบเทียบ [ซอร์สโค้ด](https://github.com/apache/tomcat/blob/76da8deac37071e8a891580d74ba1322c7a2da2c/bin/catalina.sh#L482)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา