web-dev-qa-db-ja.com

ファイルの変更の監視+ファイルへのプロセスアクセス

アプリサーバーフォルダーで何が起こっているか、つまり、プロセスxによって変更されたファイルまたは*.warファイルは過去x分間に変更(置換/作成)されました。

Linuxにこれを支援するツールはありますか?

22
Martin V.

正確なニーズによっては、 inotify または [〜#〜] fam [〜#〜] / [〜#〜 ] gamin [〜#〜] ソリューション。

10
peterph

Strace(上記で概説したとおり)は、指定した実行中のソフトウェアのアクションをチェックする1つの方法です。

watch find dir/ -mmin 1のようないくつかのコマンドは、いくつかのディレクトリで過去1分間の変更をチェックするのにも役立ちます。

あなたが探しているものに応じて、 inotify-tools はおそらくここでのもう一つの取引ツールです。

たとえば、inotifywait -mr dir/は、指定されたディレクトリの変更を監視し、ファイルを開封/読み取り/書き込み/クローズしようとするアプリケーションのフィードバックを即座に提供します。ただし、inotifyはどのアプリケーションまたはプロセスがファイルにアクセスしているかについてのフィードバックを提供しません-これはstraceが行うことです。

システムレベルの監視は通常、Javaソフトウェアが一部のアプリケーションコンテナー環境で実行されているソフトウェアでは限定的に使用されます。実際のアプリケーション(例:Tomcat)ではなくコンテナー(Tomcat)のみが表示されるためです。 .war))システムとの対話。

14

lsof によって、プロセスがアクセスしたファイルに関する情報を取得できます。

 lsof -n -p `pidof your_app`

そしてその逆では、いくつかのファイルに書き込み/読み取りするプロセスのpidを取得できます:

 lsof -n -t file
9
trankvilezator

straceを使用して、すべてのファイルアクセスを含むプロセスのすべてのシステムコールを監視できます。

プログラムを開始するとき:

$ strace ./myserver

straceをそのPIDを介して実行中のプロセスにアタッチすることもできます。

$ ps aux | grep myserver
me      1859  0.0  0.0  25288   424 ?        Ss   Sep02   0:00 myserver
$ strace -p 1859
6
umläute

watch find dir/ -mmin 1は私にはうまくいきませんでした。何が起こったのかは単にコピーして比較することでした:

cp -r dir /tmp/olddir
# initialize/whatever
diff -r dir /tmp/olddir

これはかなりのリソースを消費しますが、スナップショットとdiff時間の間のすべての変更を示します。

0
serv-inc