Как найти файл .pid для данного процесса

15

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

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

И есть ли у всех процессов файл .pid?

Ярина
источник
5
Не у всех процессов есть .pidфайл. Приложение (или его скрипт запуска) должно явно его создать.
Багамат

Ответы:

14

Обычно вы найдете PID-файлы для демонизированных процессов в /var/run/системах в стиле Redhat / CentOS.

Если не считать этого, вы всегда можете заглянуть в сценарий инициализации процесса. Например, демон 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, помните , что монит может контролировать на струнный процесс патерн а .

ewwhite
источник
1
Спасибо большое, но когда я пытаюсь 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
Ондра Жижка
источник