【发布时间】:2012-02-16 22:52:36
【问题描述】:
我需要识别一个定期写入日志文件的守护进程。问题是我不知道哪个进程在做这项工作,我需要在明天之前向客户展示一些进展。有人知道吗?
我已经在 PPID 的帮助下整理出了系统中运行的守护进程。任何帮助将不胜感激。
另外我认为守护进程有可能(很少)没有 PPID 为 1。那么我们如何才能找到它呢?
【问题讨论】:
标签: unix process operating-system daemon
我需要识别一个定期写入日志文件的守护进程。问题是我不知道哪个进程在做这项工作,我需要在明天之前向客户展示一些进展。有人知道吗?
我已经在 PPID 的帮助下整理出了系统中运行的守护进程。任何帮助将不胜感激。
另外我认为守护进程有可能(很少)没有 PPID 为 1。那么我们如何才能找到它呢?
【问题讨论】:
标签: unix process operating-system daemon
【讨论】:
watch定期执行fuser。例如watch fuser file.log.
watch,可以在while循环中调用fuser。
lsof 给出了一个带有进程的打开文件列表。
所以lsof | grep <filename> 应该可以帮到你。
【讨论】:
您可以使用 auditctl。
# sudo apt-get install auditd
# sudo /sbin/auditctl -w /path/to/file -p war -k hosts-file
-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.
# sudo /sbin/ausearch -f /path/to/file | more
给出诸如
之类的输出type=UNKNOWN[1327] msg=audit(1459766547.822:130): proctitle=2F7573722F7362696E2F61706163686532002D6B007374617274 type=PATH msg=audit(1459766547.822:130): item=0 name="/path/to/file" inode=141561 dev=08:00 mode=0100444 ouid=33 ogid=33 rdev=00:00 nametype=NORMAL 类型=CWD 消息=审计(1459766547.822:130):cwd="/" type=SYSCALL msg=audit(1459766547.822:130): arch=c000003e syscall=2 成功=yes exit=41 a0=7f3c23034cd0 a1=80000 a2=1b6 a3=8 items=1 ppid=24452 pid=6797 auid=42949672 95 uid=33 gid=33 euid=33 suid=33 fsuid=33 egid=33 sgid=33 fsgid=33 tty=(无) ses=4294967295 comm="apache2" exe="/usr/sbin/apache2" key= “主机文件”
【讨论】:
sudo /sbin/auditctl -D 如果关闭则关闭。
lsof 和 fuser 如果文件是在很短的时间内写入的,那么即使在 while 循环中打开文件也需要很长时间。