Come trovare il file .pid per un determinato processo


15

Sto configurando Monit e voglio monitorare una determinata applicazione Python. Monit fa questo guardando i file .pid per i processi, ma non so dove sarebbe.

Ho anche provato a creare il mio semplice eseguibile ed eseguirlo, anche qui non riesco a capire dove viene creato il file .pid.

E tutti i processi hanno un file .pid?


5
Non tutti i processi hanno un .pidfile. L'applicazione (o il suo script di avvio) deve crearne esplicitamente uno.
bahamat,

Risposte:


14

Di solito troverai i file PID per i processi daemonizzati /var/run/su sistemi in stile Redhat / CentOS.

A parte questo, puoi sempre cercare nello script di processo init. 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 /etc/init.d/functionsfornisce lo 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 fonti /etc/init.d/functions, il PID vivrà in /var/run/*.pid.

Per le applicazioni personalizzate, il PID sarà definito in uno script wrapper (si spera). Tuttavia, la maggior parte degli sviluppatori che conosco seguono la stessa convenzione dei demoni sopra.

Se fai incontro qualcosa senza un file PID, ricordate che Monit può monitorare su un patern stringa di processo pure .


1
ewwhite- Grazie mille- ma quando provo monit procmatch anythingdalla riga di comando ottengo monit: invalid argument -- procmatch. Qualche idea?
Yarin,

Quale versione di Monit stai usando? (Tipo monit -V) Quale sistema operativo / distribuzione?
ewwhite,

Monit 5.1.1 yummed su CentOS 6
Yarin

Inoltre, quali sarebbero le mie opzioni per più processi non daemon? Cosa ne pensi di questa risposta
Yarin,

@yarin Sembra che tu abbia il Monit dal repository EPEL . La versione per EL6 di RPMForge è 5.4.
ewwhite,

1

Un altro approccio che ho adottato:

Ho un server di database in esecuzione in modalità integrata e i dati si trovano nella directory dell'applicazione contenente.

Il database ha qualcosa come un file .pid, ma lo chiama il 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 dato una lunga lista di socket, pipe, file 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.