Soluzione 1:
Di solito troverai i file PID per i processi demonizzati in /var/run/
su sistemi in stile Redhat/CentOS.
A parte questo, puoi sempre guardare nello script init del processo. Ad esempio, il demone SSH viene avviato con lo script in /etc/init.d/sshd
. A volte il PID verrà definito lì (cerca pid, PID, PIDFILE, PID_FILE, ecc.).
Tuttavia, la maggior parte degli altri demoni sui sistemi in stile RHEL generano /etc/init.d/functions
script per alcune funzionalità comuni.
# 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}
Per tutto ciò che genera /etc/init.d/functions
, il PID risiederà in /var/run/*.pid
.
Per le applicazioni personalizzate, il PID verrà definito in uno script wrapper (si spera). Tuttavia, la maggior parte degli sviluppatori che conosco seguono la stessa convenzione dei demoni di cui sopra.
Se lo fai incontri qualcosa senza un file PID, ricorda che Monit può monitorare anche su un patern di stringhe di processo.
Soluzione 2:
Un altro approccio che ho adottato:
Ho un server di database in esecuzione in modalità incorporata ei dati si trovano all'interno della directory dell'applicazione che li contiene.
Il database ha qualcosa di simile a un file .pid, ma lo chiama file di blocco. Per individuare questo file di blocco, ho elencato tutti i file tenuti aperti dall'app:
$ ls -l /proc/18264/fd | cut -d'>' -f2
Questo mi ha fornito un lungo elenco che include socket, pipe, file del server, ecc. Pochi filtri e sono arrivato a ciò di cui avevo bisogno:
$ 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