当我运行时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'
或者可以捕获更多数据(取决于系统繁忙程度)并详细分析该输出文件。