Cómo encontrar el archivo .pid para un proceso determinado

15

Estoy configurando monit y quiero monitorear una aplicación de python dada. Monit hace esto mirando los archivos .pid para los procesos, pero no sé dónde estaría esto.

También intenté crear mi propio ejecutable simple y ejecutarlo; aquí tampoco puedo entender dónde se crea el archivo .pid.

¿Y todos los procesos tienen un archivo .pid?

Yarin
fuente
55
No todos los procesos tienen un .pidarchivo. La aplicación (o su secuencia de comandos de inicio) necesita crear una explícitamente.
bahamat

Respuestas:

14

Por lo general, encontrará los archivos PID para procesos demonizados en los /var/run/sistemas de estilo Redhat / CentOS.

Aparte de eso, siempre puede buscar en el script de inicio del proceso. Por ejemplo, el demonio SSH se inicia con el script en /etc/init.d/sshd. A veces, el PID se definirá allí (busque pid, PID, PIDFILE, PID_FILE, etc.).

Sin embargo, la mayoría de los otros demonios en los sistemas de estilo RHEL obtienen el /etc/init.d/functionsscript para algunas características comunes.

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

Para cualquier cosa que las fuentes /etc/init.d/functions, el PID vivirá en /var/run/*.pid.

Para aplicaciones personalizadas, el PID se definirá en un script de contenedor (con suerte). Sin embargo, la mayoría de los desarrolladores que conozco siguen la misma convención que los demonios anteriores.

Si haces encuentro algo sin un archivo PID, recuerda que Monit puede supervisar en un patern cadena de proceso, así .

ewwhite
fuente
1
ewwhite- Muchas gracias- pero cuando intento monit procmatch anythingen la línea de comando me sale monit: invalid argument -- procmatch. ¿Algunas ideas?
Yarin
¿Qué versión de Monit estás usando? (Tipo monit -V) ¿Qué sistema operativo / distribución?
ewwhite
Monit 5.1.1 apareció en CentOS 6
Yarin el
Además, ¿cuáles serían mis opciones para múltiples procesos que no sean daemon? ¿Qué opinas de esta respuesta
Yarin
@yarin Parece que tienes el Monit del repositorio de EPEL . La versión para EL6 de RPMForge es 5.4.
ewwhite
1

Otro enfoque que tomé:

Tengo un servidor de base de datos ejecutándose en modo incrustado, y los datos están dentro del directorio de la aplicación que lo contiene.

La base de datos tiene algo así como un archivo .pid, pero lo llama archivo de bloqueo. Para localizar este archivo de bloqueo, enumeré todos los archivos abiertos por la aplicación:

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

Eso me dio una larga lista que incluye enchufes, tuberías, archivos de servidor, etc. Pocos filtros y llegué a lo que necesitaba:

$ 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
fuente