Encontre o usuário de um processo de falha

3

Quando executo service mongod start , um certo processo será executado e travará quase instantaneamente, fazendo com que o serviço falhe. Eu suspeito que esse problema seja que o processo não é executado como o usuário correto.

Os registros desse serviço não são úteis, infelizmente.

Por isso, gostaria de saber sob qual usuário esse processo será criado.

ps aux não funciona porque o processo falha muito rapidamente.

Posso de alguma forma registrar todos os processos que irão falhar em um arquivo, incluindo o nome do usuário ou algo assim?

Estou no Debian Wheezy dentro de um contêiner do Docker.

    
por Forivin 16.11.2017 / 14:20

1 resposta

1

Uma maneira seria envolver strace em torno do processo de inicialização, o que envolve envolver systemd em si ou alterar o mongod.service para chamar um wrapper strace apropriado que, por sua vez, inicia mongod . Prós: não são necessários módulos do kernel. Contras: atrasará as coisas, editará o arquivo mongod service (lembre-se de desfazê-las ...) ou poderá interferir no problema de maneiras desconhecidas.

#!/bin/sh
exec strace -ff -o /root/lookatthese -e trace=process /mongodb/startup/command/here

Outra maneira seria usar sysdig ou SystemTap , que exigem módulos do kernel, mas oferecem log mais eficiente do que está acontecendo sem precisar inserir strace entre as etapas usuais:

# sysdig 'evt.type = execve'
...

Mostraria todas as chamadas execve enquanto você executava o comando de inicialização usual; para incluir o usuário use algo como

# sysdig -p \
  '%evt.time %proc.name[%proc.pid] uid=%user.uid ppid=%proc.ppid %proc.exeline' \
  'evt.type = execve'

ou um poderia capturar mais dados (dependendo de quão ocupado o sistema é) e analisar esse arquivo de saída em detalhes.

    
por 16.11.2017 / 18:03