Cara menemukan file .pid untuk proses tertentu

15

Saya sedang mengatur monit dan ingin memonitor aplikasi python yang diberikan. Monit melakukan ini dengan melihat file .pid untuk proses, tapi saya tidak tahu di mana ini akan berada.

Saya juga mencoba membuat executable sederhana saya sendiri dan menjalankannya di sini juga saya tidak tahu di mana file .pid dibuat.

Dan apakah semua proses memiliki file .pid?

Yarin
sumber
5
Tidak semua proses memiliki .pidfile. Aplikasi (atau skrip start upnya) perlu membuatnya secara eksplisit.
bahamat

Jawaban:

14

Anda biasanya akan menemukan file PID untuk proses yang di /var/run/-daemonisasi pada sistem gaya Redhat / CentOS.

Singkatnya, Anda selalu dapat melihat dalam skrip init proses. Misalnya, daemon SSH dimulai dengan skrip di /etc/init.d/sshd. Terkadang PID akan didefinisikan di sana (cari pid, PID, PIDFILE, PID_FILE, dll.).

Namun, sebagian besar daemon lain pada sistem gaya RHEL sumber /etc/init.d/functionsskrip untuk beberapa fitur umum.

# 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}

Untuk apa pun yang sumbernya /etc/init.d/functions, PID akan tinggal /var/run/*.pid.

Untuk aplikasi khusus, PID akan didefinisikan dalam skrip pembungkus (mudah-mudahan). Kebanyakan pengembang yang saya kenal mengikuti konvensi yang sama dengan daemon di atas.

Jika Anda melakukan pertemuan sesuatu tanpa file PID, ingat bahwa Monit dapat memantau pada patern proses tali juga .

putih
sumber
1
ewwhite- Terima kasih banyak- tetapi ketika saya mencoba monit procmatch anythingpada commandline saya dapatkan monit: invalid argument -- procmatch. Ada ide?
Yarin
Versi Monit apa yang Anda gunakan? (Jenis monit -V) OS / distribusi apa?
ewwhite
Monit 5.1.1 menguap ke CentOS 6
Yarin
Juga, apa yang akan menjadi opsi saya untuk beberapa proses non-daemon? Apa pendapat Anda tentang jawaban ini
Yarin
@yarin Sepertinya Anda memiliki Monit dari repositori EPEL . Versi untuk EL6 dari RPMForge adalah 5.4.
ewwhite
1

Pendekatan lain yang saya ambil:

Saya memiliki server database yang berjalan dalam mode tertanam, dan data berada dalam direktori aplikasi yang berisi.

Basis data memiliki sesuatu seperti file .pid, tetapi menyebutnya kunci file. Untuk menemukan file kunci ini, saya mendaftar semua file yang dibuka oleh aplikasi:

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

Itu memberi saya daftar panjang termasuk soket, pipa, file server dll. Beberapa filter dan saya mendapatkan apa yang saya butuhkan:

$ 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
Ondra Žižka
sumber