Comment trouver le fichier .pid pour un processus donné

15

Je configure monit et souhaite surveiller une application python donnée. Monit fait cela en regardant les fichiers .pid pour les processus, mais je ne sais pas où cela se trouverait.

J'ai également essayé de créer mon propre exécutable simple et de l'exécuter - ici aussi, je ne peux pas comprendre où le fichier .pid est créé.

Et tous les processus ont-ils un fichier .pid?

Yarin
la source
5
Tous les processus n'ont pas de .pidfichier. L'application (ou son script de démarrage) doit en créer explicitement un.
bahamat

Réponses:

14

Vous trouverez généralement les fichiers PID pour les processus démonisés dans /var/run/les systèmes de style Redhat / CentOS.

En dehors de cela, vous pouvez toujours regarder dans le script d'initialisation du processus. Par exemple, le démon SSH est démarré avec le script dans /etc/init.d/sshd. Parfois, le PID y sera défini (recherche de pid, PID, PIDFILE, PID_FILE, etc.).

Cependant, la plupart des autres démons sur les systèmes de style RHEL source le /etc/init.d/functionsscript pour certaines fonctionnalités courantes.

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

Pour tout ce qui source /etc/init.d/functions, le PID vivra /var/run/*.pid.

Pour les applications personnalisées, le PID sera défini dans un script wrapper (espérons-le). La plupart des développeurs que je connais suivent la même convention que les démons ci-dessus, cependant.

Si vous faites quelque chose de rencontre sans un fichier PID, rappelez - vous que Monit peut surveiller sur une patern chaîne de processus ainsi .

ewwhite
la source
1
ewwhite- Merci beaucoup- mais quand j'essaye monit procmatch anythingsur la ligne de commande j'obtiens monit: invalid argument -- procmatch. Des idées?
Yarin
Quelle version de Monit utilisez-vous? (Type monit -V) Quel OS / distribution?
ewwhite
Monit 5.1.1 miamait sur CentOS 6
Yarin
De plus, quelles seraient mes options pour plusieurs processus non démon? Que pensez-vous de cette réponse
Yarin
@yarin Il semble que vous ayez le Monit du dépôt EPEL . La version pour EL6 de RPMForge est 5.4.
ewwhite
1

Une autre approche que j'ai adoptée:

J'ai un serveur de base de données fonctionnant en mode intégré et les données se trouvent dans le répertoire de l'application contenant.

La base de données a quelque chose comme un fichier .pid, mais elle l'appelle fichier de verrouillage. Pour localiser ce fichier de verrouillage, j'ai répertorié tous les fichiers ouverts par l'application:

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

Cela m'a donné une longue liste comprenant des sockets, des tuyaux, des fichiers de serveur, etc. Peu de filtres et j'ai obtenu ce dont j'avais besoin:

$ 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
la source