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)。
小智 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)
您可以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)