Cách tìm tệp .pid cho một quy trình nhất định


15

Tôi đang thiết lập monit và muốn theo dõi một ứng dụng python cụ thể. Monit thực hiện điều này bằng cách xem các tệp .pid cho các quy trình, nhưng tôi không biết nơi này sẽ ở đâu.

Tôi cũng đã thử tạo tệp thực thi đơn giản của riêng mình và chạy nó - ở đây tôi cũng không thể tìm ra nơi tệp .pid được tạo.

Và tất cả các quy trình có tệp .pid không?


5
Không phải tất cả các quy trình có một .pidtập tin. Ứng dụng (hoặc tập lệnh khởi động của nó) cần tạo một cách rõ ràng.
bahamat

Câu trả lời:


14

Bạn thường sẽ tìm thấy các tệp PID cho các quy trình được tạo trong /var/run/các hệ thống kiểu Redhat / CentOS.

Nói tóm lại, bạn luôn có thể tìm trong tập lệnh init. Chẳng hạn, trình nền SSH được bắt đầu với tập lệnh trong /etc/init.d/sshd. Đôi khi, PID sẽ được xác định ở đó (tìm kiếm pid, PID, PIDFILE, PID_FILE, v.v.).

Tuy nhiên, hầu hết các trình tiện ích khác trên các hệ thống kiểu RHEL cung cấp /etc/init.d/functionstập lệnh cho một số tính năng phổ biến.

# Set $pid to pids from /var/run* for {program}.  $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
        local base=${1##*/}
        local pid_file=${2:-/var/run/$base.pid}

Đối với bất cứ điều gì mà nguồn /etc/init.d/functions, PID sẽ sống /var/run/*.pid.

Đối với các ứng dụng tùy chỉnh, PID sẽ được xác định trong tập lệnh bao bọc (hy vọng). Mặc dù vậy, hầu hết các nhà phát triển mà tôi biết đều tuân theo quy ước giống như các trình tiện ích ở trên.

Nếu bạn làm cuộc chạm trán một cái gì đó mà không có một tập tin PID, hãy nhớ rằng Monit có thể giám sát trên một patern quá trình chuỗi cũng .


1
ewwhite- Cảm ơn rất nhiều - nhưng khi tôi thử monit procmatch anythingdòng lệnh tôi nhận được monit: invalid argument -- procmatch. Có ý kiến ​​gì không?
Yarin

Phiên bản nào của Monit bạn đang sử dụng? (Loại monit -V) Hệ điều hành / phân phối nào?
ewwhite

Monit 5.1.1 đã chuyển sang CentOS 6
Yarin

Ngoài ra, đâu là lựa chọn của tôi cho nhiều quá trình không phải daemon? Bạn nghĩ gì về câu trả lời này
Yarin

@yarin Có vẻ như bạn có Monit từ kho EPEL . Phiên bản cho EL6 từ RPMForge là 5,4.
ewwhite

1

Một cách tiếp cận khác tôi đã thực hiện:

Tôi có một máy chủ cơ sở dữ liệu đang chạy trong chế độ nhúng và dữ liệu nằm trong thư mục chứa ứng dụng.

Cơ sở dữ liệu có một cái gì đó giống như một tệp .pid, nhưng nó gọi nó là tệp khóa. Để xác định vị trí tệp khóa này, tôi liệt kê tất cả các tệp được mở bởi ứng dụng:

$ ls -l /proc/18264/fd | cut -d'>' -f2

Điều đó đã cho tôi một danh sách dài bao gồm ổ cắm, đường ống, tệp máy chủ, v.v ... Rất ít bộ lọc và tôi đã nhận được những gì tôi cần:

$ ls -l /proc/18264/fd | cut -d'>' -f2 | grep /home/ | cut -b40- | sort | uniq | grep titan

/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/00000000.jdb
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0.lck
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.lck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.