web-dev-qa-db-fra.com

Comment trouver le fichier .pid pour un processus donné

Je configure monit et je veux surveiller une application donnée python. Monit le fait 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?

15
Yarin

Vous trouverez généralement les fichiers PID pour les processus démonisés dans /var/run/ sur les systèmes de type 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/functions script pour quelques fonctionnalités communes.

# 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 dans /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 rencontrez quelque chose sans fichier PID, souvenez-vous que Monit peut également surveiller sur un motif de chaîne de processus .

14
ewwhite

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 maintenus 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
1
Ondra Žižka