So finden Sie die PID-Datei für einen bestimmten Prozess


15

Ich richte monit ein und möchte eine bestimmte Python-Anwendung überwachen. Monit tut dies, indem er die .pid-Dateien nach Prozessen durchsucht, aber ich weiß nicht, wo dies sein würde.

Ich habe auch versucht, meine eigene einfache ausführbare Datei zu erstellen und sie auszuführen. Auch hier kann ich nicht herausfinden, wo die PID-Datei erstellt wird.

Und haben alle Prozesse eine PID-Datei?


5
Nicht alle Prozesse haben eine .pidDatei. Die Anwendung (oder ihr Startskript) muss explizit eines erstellen.
Bahamat

Antworten:


14

Normalerweise finden Sie die PID-Dateien für daemonisierte Prozesse in /var/run/Redhat / CentOS-ähnlichen Systemen.

Kurz gesagt, Sie können immer in das Prozess-Init-Skript schauen. Beispielsweise wird der SSH-Dämon mit dem Skript in gestartet /etc/init.d/sshd. Manchmal wird die PID dort definiert (Suche nach PID, PID, PIDFILE, PID_FILE usw.).

Die meisten anderen Daemons auf RHEL-ähnlichen Systemen verwenden das /etc/init.d/functionsSkript jedoch für einige allgemeine Funktionen.

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

Für alles, was Quellen /etc/init.d/functions, wird die PID leben /var/run/*.pid.

Für benutzerdefinierte Anwendungen wird die PID (hoffentlich) in einem Wrapper-Skript definiert. Die meisten Entwickler, die ich kenne, folgen jedoch der gleichen Konvention wie die obigen Daemons.

Wenn Sie tun , ohne eine PID - Datei Begegnung etwas, denken Sie daran , dass Monit als auch auf einem Prozess String Pater überwachen kann .


1
ewwhite- Vielen Dank- aber wenn ich monit procmatch anythingdie Kommandozeile ausprobiere bekomme ich monit: invalid argument -- procmatch. Irgendwelche Ideen?
Yarin

Welche Version von Monit verwenden Sie? (Typ monit -V) Welches Betriebssystem / Distribution?
Ewwhite

Monit 5.1.1 ist
Yarin

Welche Optionen stehen für mehrere Nicht-Daemon-Prozesse zur Verfügung? Was denkst du über diese Antwort
Yarin

@yarin Sie haben anscheinend den Monit aus dem EPEL-Repository . Die Version für EL6 von RPMForge ist 5.4.
Ewwhite

1

Ein anderer Ansatz, den ich gewählt habe:

Ich habe einen Datenbankserver, der im eingebetteten Modus ausgeführt wird, und die Daten befinden sich im Verzeichnis der enthaltenen Anwendung.

Die Datenbank hat so etwas wie eine PID-Datei, nennt sie jedoch Sperrdatei. Um diese Sperrdatei zu finden, habe ich alle von der App geöffneten Dateien aufgelistet:

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

Das gab mir eine lange Liste mit Sockets, Pipes, Serverdateien usw. Einige Filter und ich bekam das, was ich brauchte:

$ 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.