Як знайти .pid-файл для заданого процесу


15

Я налаштовую monit і хочу контролювати задану програму python. Monit робить це, переглядаючи файли .pid для процесів, але я не знаю, де це було б.

Я також спробував створити власний простий виконуваний файл і запустити його - і тут я не можу зрозуміти, де створений файл .pid.

І чи всі процеси мають .pid файл?


5
Не всі процеси мають .pidфайл. Програму (або її сценарій запуску) потрібно явно створити.
bahamat

Відповіді:


14

Зазвичай ви знайдете файли PID для демонізованих процесів у /var/run/системах у стилі Redhat / CentOS.

Незважаючи на це, ви завжди можете шукати в сценарії init процесу. Наприклад, демон SSH запускається зі скрипту в /etc/init.d/sshd. Іноді там буде визначено PID (пошук pid, PID, PIDFILE, PID_FILE тощо).

Однак більшість інших демонів у системах у стилі RHEL створюють /etc/init.d/functionsсценарій для деяких загальних особливостей.

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

Для всіх джерел /etc/init.d/functions, PID буде жити /var/run/*.pid.

Для користувацьких додатків PID буде визначений у сценарії обгортки (сподіваємось). Більшість розробників, яких я знаю, дотримуються тієї ж конвенції, що і демони, наведені вище.

Якщо ви робите наштовхуються що - то без файлу PID, пам'ятайте , що моніт може контролювати на струнний процес патерн а .


1
ewwhite- Дякую багато, але коли я пробую monit procmatch anythingкомандний рядок, я отримую monit: invalid argument -- procmatch. Будь-які ідеї?
Ярін

Яку версію Monit ви використовуєте? (Тип monit -V) Яка ОС / дистрибутив?
ewwhite

Моніт 5.1.1 вийшов на CentOS 6
Ярін

Крім того, які мої варіанти для декількох недемонних процесів? Що ви думаєте про цю відповідь
Ярін

@yarin Схоже, у вас є Monit зі сховища EPEL . Версія для EL6 від RPMForge становить 5.4.
ewwhite

1

Ще один підхід:

У мене працює сервер баз даних у вбудованому режимі, і дані знаходяться в каталозі, що містить додаток.

У базі даних є щось на зразок .pid-файлу, але він називає його файлом блокування. Щоб знайти цей файл блокування, я перерахував усі файли, відкриті додатком:

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

Це дало мені довгий список, включаючи сокети, труби, серверні файли тощо. Кілька фільтрів, і я дістався до того, що мені потрібно:

$ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.