Solusi 1:
Anda biasanya akan menemukan file PID untuk proses daemonisasi di /var/run/
pada sistem bergaya Redhat/CentOS.
Singkatnya, Anda selalu dapat melihat skrip proses init. Misalnya, daemon SSH dimulai dengan skrip di /etc/init.d/sshd
. Terkadang PID akan ditentukan di sana (cari pid, PID, PIDFILE, PID_FILE, dll.).
Namun, sebagian besar daemon lain pada sistem gaya RHEL menggunakan /etc/init.d/functions
skrip 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 bersumber /etc/init.d/functions
, PID akan berada di /var/run/*.pid
.
Untuk aplikasi khusus, PID akan ditentukan dalam skrip pembungkus (semoga). Namun, sebagian besar pengembang yang saya kenal mengikuti konvensi yang sama dengan daemon di atas.
Jika Anda lakukan menemukan sesuatu tanpa file PID, ingat bahwa Monit juga dapat memantau pola string proses.
Solusi 2:
Pendekatan lain yang saya ambil:
Saya memiliki server basis data yang berjalan dalam mode tersemat, dan datanya ada di dalam direktori aplikasi yang memuatnya.
Basis data memiliki sesuatu seperti file .pid, tetapi disebut file kunci. Untuk menemukan file kunci ini, saya mencantumkan 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