Điểm:0

Shell Scripting - Nhiều ID tiến trình thay vì một

lá cờ cn

Tôi đang viết một tập lệnh bash đơn giản để tắt tomcat và nếu nó không dừng lại một cách duyên dáng thì hãy kiểm tra xem PID của tomcat có còn tồn tại hay không và hủy nó.

Tôi chuyển tên tomcat dưới dạng một biến cho tập lệnh như bên dưới. Trong một số trường hợp, tôi chuyển hai hoặc ba tên của tomcat, đó là lý do tại sao việc sử dụng FOR LOOP bên dưới

./shutdown.sh tomcat1

Nội dung của tập lệnh Shutdown.sh

#!/bin/bash
cho tên trong "$@"
làm
    bash /opt/$name/bin/shutdown.sh   
xong

ngủ 30

cho tên trong "$@"
làm
   process_id=`ps -ef | grep $name | grep -v grep | awk '{ in $2 }'`

   nếu [ $ process_id ] 
   sau đó
       giết -9 $ process_id
   fi

xong

echo " Thực thi tập lệnh đã hoàn thành"

Khi Tomcat tắt máy một cách duyên dáng thì không có vấn đề gì. Nhưng khi tomcat không dừng lại, tôi gặp sự cố.

Đoạn mã dưới đây khi được chạy trực tiếp trên dấu nhắc lệnh cung cấp cho tôi ID tiến trình chính xác (62457) của tomcat. Nhưng cùng một đoạn trong tập lệnh shell đang mang lại cho tôi ba ID tiến trình (62610,62611,62457).

process_id=`ps -ef | grep $name | grep -v grep | awk '{ in $2 }'`

bạn có thể cho tôi biết tại sao tôi nhận được ba ID quy trình trong tập lệnh so với chỉ một không?

Bất kỳ gợi ý nào khác dễ dàng hơn để KILL?

Josh Zhang avatar
lá cờ ph
Thay vì lặp qua các PID có thể, tại sao bạn không chuyển kết quả thành `xargs kill -9`? TỨC LÀ: `ps -ef | grep $name | grep -v grep | awk '{ in $2 }' | xargs giết -9`
Raj K avatar
lá cờ cn
Tôi chưa thử nó, nhưng tự hỏi. Trong trường hợp Tomcat tắt máy một cách duyên dáng và không có PID để KILL, về cơ bản không có đầu vào cho lệnh "xargs". lệnh xargs có phàn nàn về lỗi cú pháp không?
Josh Zhang avatar
lá cờ ph
Nếu không có PID cho `xargs kill -9`, bạn thực sự sẽ gặp lỗi từ `kill` vì nó sẽ giống như chạy lệnh mà không có bất kỳ PID nào.
Brandon Xavier avatar
lá cờ us
Lệnh process_id của bạn sẽ bao gồm chính lệnh `./shutdown.sh`. Bạn có thể thêm một grep khác trong đường dẫn như `. . .| grep -v shutdown.sh | grep -v grep . . .` hoặc làm điều gì đó như ` . . . | egrep -v 'grep|shutdown.sh' . . .`
John Mahowald avatar
lá cờ cn
Hệ điều hành của bạn có tập lệnh init chung hoặc hệ thống quản lý dịch vụ không? Làm đúng cách trong shell không tầm thường như người ta tưởng.
Raj K avatar
lá cờ cn
@BrandonXavier ` | grep -v shutdown.sh | grep -v grep ` đã hoạt động. Cảm ơn bạn.
Piotr P. Karwasz avatar
lá cờ by
Nếu bạn đặt `CATALINA_PID` khi khởi động Tomcat, thì `shutdown.sh 30 -force` sẽ thực hiện chính xác điều tương tự như tập lệnh của bạn (nhưng đúng hơn). Cf. [mã nguồn](https://github.com/apache/tomcat/blob/76da8deac37071e8a891580d74ba1322c7a2da2c/bin/catalina.sh#L482).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.