Como encontrar o arquivo .pid para um determinado processo

15

Estou configurando o monit e quero monitorar um determinado aplicativo python. O Monit faz isso olhando os arquivos .pid para processos, mas não sei onde isso seria.

Eu também tentei criar meu próprio executável simples e executá-lo - aqui também não consigo descobrir onde o arquivo .pid é criado.

E todos os processos têm um arquivo .pid?

Yarin
fonte
5
Nem todos os processos têm um .pidarquivo. O aplicativo (ou seu script de inicialização) precisa criar explicitamente um.
bahamat

Respostas:

14

Você geralmente encontrará os arquivos PID para processos daemonizados nos /var/run/sistemas no estilo Redhat / CentOS.

Além disso, você sempre pode procurar no script init do processo. Por exemplo, o daemon SSH é iniciado com o script em /etc/init.d/sshd. Às vezes, o PID será definido lá (pesquise pid, PID, PIDFILE, PID_FILE, etc.).

No entanto, a maioria dos outros daemons nos sistemas no estilo RHEL /etc/init.d/functionsfornece o script para alguns recursos comuns.

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

Para qualquer coisa que origine /etc/init.d/functions, o PID permanecerá /var/run/*.pid.

Para aplicativos customizados, o PID será definido em um script de wrapper (espero). A maioria dos desenvolvedores que conheço segue a mesma convenção que os daemons acima.

Se você faz encontro algo sem um arquivo PID, lembre-se que Monit pode monitorar em um patern corda processo bem .

ewwhite
fonte
1
ewwhite- Muito obrigado- mas quando tento monit procmatch anythinga linha de comando recebo monit: invalid argument -- procmatch. Alguma ideia?
Yarin
Qual versão do Monit você está usando? (Tipo monit -V) Qual SO / distribuição?
precisa saber é
Monit 5.1.1 yummed no CentOS 6
Yarin
Além disso, quais seriam minhas opções para vários processos não daemon? O que você acha desta resposta
Yarin
@yarin Parece que você tem o Monit do repositório EPEL . A versão para EL6 do RPMForge é 5.4.
precisa saber é
1

Outra abordagem que tomei:

Eu tenho um servidor de banco de dados em execução no modo incorporado e os dados estão no diretório do aplicativo que contém.

O banco de dados tem algo como um arquivo .pid, mas chama de arquivo de bloqueio. Para localizar esse arquivo de bloqueio, listei todos os arquivos mantidos abertos pelo aplicativo:

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

Isso me deu uma longa lista, incluindo soquetes, tubos, arquivos de servidor etc. Poucos filtros e cheguei ao que precisava:

$ 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
fonte