监控文件更改 + 进程访问文件

Mar*_* V. 27 shell process monitoring files

我想看看我的应用程序服务器文件夹中发生了什么,即进程 x 更改了哪些*.war文件,或者在过去 x 分钟内更改了(替换/创建)哪些文件。

Linux 中是否有工具可以帮助解决此问题?

kno*_*ker 14

Strace(如上所述)是一种检查指定运行软件行为的方法。

一些类似的命令watch find dir/ -mmin 1也可能有助于检查某个目录中过去一分钟的更改。

根据您的确切需求,inotify-tools可能是这里的另一种交易工具。

例如,inotifywait -mr dir/监视给定目录中的更改并立即为您提供任何尝试打开/读取/写入/关闭文件的应用程序的反馈。但是,inotify 不会向您提供有关哪个应用程序或进程正在访问文件的反馈——这是 strace 所做的事情。

请注意,系统级监控对于在某些应用程序容器环境中运行的 Java 软件的用途通常是有限的,因为您只能看到容器(例如 Tomcat),而看不到与系统交互的实际应用程序(例如 .war)。


pet*_*rph 11

根据您的具体需求,您可能需要研究inotify和/或FAM / GAMIN解决方案。


小智 9

您可以通过lsof获取有关进程访问哪些文件的信息:

 lsof -n -p `pidof your_app`
Run Code Online (Sandbox Code Playgroud)

反之亦然,您可以获得写入/读取某个文件的进程的pid:

 lsof -n -t file
Run Code Online (Sandbox Code Playgroud)


uml*_*ute 6

您可以strace用来监视进程的所有系统调用,包括所有文件访问。

启动程序时:

$ strace ./myserver
Run Code Online (Sandbox Code Playgroud)

您还可以通过它的 PID 将 strace 附加到正在运行的进程:

$ ps aux | grep myserver
me      1859  0.0  0.0  25288   424 ?        Ss   Sep02   0:00 myserver
$ strace -p 1859
Run Code Online (Sandbox Code Playgroud)