Jak znaleźć plik .pid dla danego procesu

15

Konfiguruję monit i chcę monitorować daną aplikację w języku Python. Monit robi to, patrząc na pliki .pid dla procesów, ale nie wiem, gdzie to by było.

Próbowałem także stworzyć swój własny plik wykonywalny i uruchomić go - tutaj też nie mogę dowiedzieć się, gdzie jest tworzony plik .pid.

I czy wszystkie procesy mają plik .pid?

Yarin
źródło
5
Nie wszystkie procesy mają .pidplik. Aplikacja (lub jej skrypt startowy) musi ją wyraźnie utworzyć.
bahamat

Odpowiedzi:

14

Zazwyczaj pliki PID dla demonizowanych procesów znajdują się w /var/run/systemach typu Redhat / CentOS.

Poza tym zawsze możesz zajrzeć do skryptu inicjującego proces. Na przykład demon SSH jest uruchamiany ze skryptem w /etc/init.d/sshd. Czasami PID zostanie tam zdefiniowany (wyszukaj pid, PID, PIDFILE, PID_FILE itp.).

Jednak większość innych demonów w systemach typu RHEL pozyskuje /etc/init.d/functionsskrypt dla niektórych typowych funkcji.

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

W przypadku wszystkich źródeł /etc/init.d/functionsPID będzie dostępny /var/run/*.pid.

W przypadku niestandardowych aplikacji PID zostanie zdefiniowany w skrypcie opakowania (mam nadzieję). Jednak większość programistów, których znam, przestrzega tej samej konwencji co powyższe demony.

Jeśli zrobić napotkać coś bez pliku PID, należy pamiętać, że Monit może monitorować na patern strun proces, jak również .

ewwhite
źródło
1
ewwhite- Wielkie dzięki- ale kiedy próbuję monit procmatch anythingz wiersza poleceń, dostaję monit: invalid argument -- procmatch. Jakieś pomysły?
Yarin
Jakiej wersji Monit używasz? (Typ monit -V) Który system operacyjny / dystrybucja?
ewwhite
Monit 5.1.1 yummed na CentOS 6
Yarin
Jakie byłyby moje opcje dla wielu procesów innych niż demony? Co sądzisz o tej odpowiedzi
Yarin
@yarin Wygląda na to, że masz Monit z repozytorium EPEL . Wersja dla EL6 z RPMForge to 5.4.
ewwhite
1

Inne podejście, które podjąłem:

Mam serwer bazy danych działający w trybie osadzonym, a dane znajdują się w katalogu zawierającym aplikację.

Baza danych ma coś w rodzaju pliku .pid, ale nazywa to plikiem blokady. Aby zlokalizować ten plik blokady, wymieniłem wszystkie pliki otwarte przez aplikację:

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

To dało mi długą listę obejmującą gniazda, potoki, pliki serwerów itp. Kilka filtrów i dostałem to, czego potrzebowałem:

$ 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
źródło