查找崩溃进程的用户

查找崩溃进程的用户

当我运行时service mongod start,某个进程将运行并几乎立即崩溃,导致服务失败。我怀疑这个问题是因为该进程没有以正确的用户身份运行。

不幸的是,该服务的日志根本没有帮助。

所以我想知道该进程将在哪个用户下创建。

ps aux不起作用,因为进程崩溃得太快。

我可以以某种方式将所有将要崩溃的进程记录到文件中,包括用户名或类似的内容吗?

我在 Docker 容器内使用 Debian Wheezy。

答案1

一种方法是包装strace启动过程,这需要包装systemd自身,或者更改以mongod.service调用适当的strace包装器,然后依次启动mongod。优点:不需要内核模块。缺点:会减慢速度,对mongod服务文件进行繁琐的编辑(记住撤消它们......),或者可能以未知的方式干扰问题。

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

另一种方法是使用sysdig或 ,SystemTap它确实需要内核模块,但可以更有效地记录正在发生的事情,而无需strace在通常的步骤之间插入:

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

execve当您运行通常的启动命令时将显示所有调用;包括用户使用类似的东西

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

或者可以捕获更多数据(取决于系统繁忙程度)并详细分析该输出文件。

相关内容