実家には、この何年も監視カメラを入れている。オカンが生きていたときは、オカンに何か変化がなかったのかを監視していた。特に、心配していたのはオカンの転倒。まず、よほどのことがない限り、オカン自身が転倒を自白しない。で、実際どのように転倒したのかも正直わからない。監視カメラがあると、オカンの転倒っぷりがわかる。ある時は、顔面から転倒して、まるで江頭2:50の3点倒立みたいになっていた。ちょっとびっくりした。だいぶ前からiPhoneのヘルスケアの監視でも転倒リスクが大と出ていたので。終末期になると、訪看さん、ヘルパーさんがちょくちょくきてくれていたので、別に監視はしなくてもよかったが、そんな状況を伝えることができない会社からは無慈悲にも出張要請があり、出張先からの監視では少し活躍。そして、最期は2人の格闘?、最終シーンもバッチリ記録されていた。そのNASは撤去したが、まだ何もできない。
オカンのいない今現在は、不在時の監視カメラとしてバッチリ監視カメラの余生を送っている。今回は、監視の話。それも、サービスとかの監視ではなく、ファイル監視の話。誰がそんなファイルを作ったんだ、消したんだという揉め事に使える。
閑話休題
inotify-toolsをインストールすることによってI/O監視ができる。ただし、このコマンドは、Ubuntuはaptでインストールできる、また、すぐ使えるが、RHEL系の場合、EPELにしかパッケージがない。
毎度いうが、EPELって、使っていいんですか?サポートされているんですか?のような、70年前の大本営発表だけを信じていた国民の思考であれば、使わない方がいいかもしれない。
EPELのレポジトリは以下で設定できるが、inotify-toolsのためだけに、EPELの設定をするのが嫌なら、直接EPELのページから落としてきてもインストールできそう。inotify-toolsには特段、依存関係はなさそう。その場合、インストールするRHELバリアントとバージョンのEPELから落とすこと。RHEL/CentOS、Oracle Linuxなど全て配布元が異なる。
いまさらながら各RHEL variantでのEPELのインストール
直インストールの例 (RHEL8だけ確認。あとは未確認)
RHEL 8
rpm -ivh https://dl.fedoraproject.org/pub/epel/8/Everything/x86_64/Packages/i/inotify-tools-3.14-19.el8.x86_64.rpm
Oracle Linux 8
rpm -ivh https://yum.oracle.com/repo/OracleLinux/OL8/developer/EPEL/x86_64/getPackage/inotify-tools-3.14-19.el8.x86_64.rpm
inotify-toolsでインストールされるコマンド
inotifywait
監視対象のファイルやディレクトリへのイベントをリアルタイムに表示
inotifywatch
そのイベント数の合計をサマリにして表示
inotifywaitの使い方
オプションは、省略オプションもあるが、以下は長い名前のオプションを利用。例として/tmpのフォルダ監視をしてみる。
標準出力
inotifywait --monitor --recursive /tmp
ファイル出力(標準出力には表示されない。)
inotifywait --monitor --recursive -o ~/monitor1.log /tmp
結構ログの量が多いので、パーティションの空き領域があるところに出した方がいいと思う。
いつのIOだかわからないので、出力に日付をつける。
inotifywait --monitor --recursive -o ~/monitor1.log --timefmt '%F %T' --format '%T %w%f %e' /tmp/
SSH接続で作成されるファイルを監視から除外したい。(実際にやってみたら/tmp/sh-thd.XXXXの出力が邪魔だった。)
inotifywait --monitor --recursive -o ~/monitor1.log --timefmt '%F %T' --format '%T %w%f %e' --exclude "sh-thd.*" /tmp/
デーモン起動をさせたい。(バックグラウンドジョブにしない。起動したコンソールから抜けられる)
inotifywait --monitor --recursive -o ~/monitor1.log --timefmt '%F %T' --format '%T %w%f %e' --exclude "sh-thd.*" --daemon /tmp/
止めるときは、プロセスを叩き切る
ただ、このinotifywaitコマンドは、Linuxでしか使えない。Windowsの場合は、inotify-toolsをWindows上でコンパイルする必要がある。
Windowsでの利用はまた今度。