ファイルを置くイベントトリガーにinotifywait
を使用します。
inotifywait
が多くのファイルを監視しているとき、max_user_watches
を超えると、次のエラーが発生します。
Inotifyウォッチが終了してから終了します。#012/proc/sys/fs/inotify/max_user_watchesの増加を検討してください。
チューニングが必要です/proc/sys/fs/inotify/max_user_watches
、しかし、現在のファイル監視番号を確認することは可能ですか?
ファイル記述子でfile-nrのようにチェックする方法はありますか?
私は一緒に石畳を作りました この小さなスクリプト @mosvyの答えに基づいています。
$ inotify-consumers
INOTIFY
WATCHER
COUNT PID CMD
----------------------------------------
7111 3079 node /home/carlerik/dev/nimble-frontend/node_modules/.bin/webpack --config config/webpack.dev.js
79 1541 /usr/lib/gnome-settings-daemon/gsd-xsettings
30 1664 /usr/lib/gvfs/gvfsd-trash --spawner :1.22 /org/gtk/gvfs/exec_spaw/0
14 1630 /usr/bin/gnome-software --gapplication-service
14 1191 /lib/systemd/systemd --user
10 1371 /usr/bin/gnome-Shell
9 2459 update-notifier
7 1635 nautilus-desktop
5 1191 /lib/systemd/systemd --user
2 1536 /usr/lib/gnome-settings-daemon/gsd-sound
2 1452 /usr/lib/evolution/evolution-source-registry
2 1429 ibus-daemon --xim --panel disable
2 1248 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
1 1863 /usr/lib/gnome-terminal/gnome-terminal-server
1 1713 /usr/lib/evolution/evolution-addressbook-factory
1 1678 /usr/lib/ibus/ibus-engine-simple
1 1625 /usr/lib/evolution/evolution-calendar-factory
1 1560 /usr/lib/gnome-settings-daemon/gsd-Housekeeping
1 1556 /usr/lib/gnome-settings-daemon/gsd-color
1 1499 /usr/lib/gvfs/gvfs-afc-volume-monitor
1 1487 /usr/lib/gnome-online-accounts/goa-identity-service
1 1480 /usr/lib/gvfs/gvfs-udisks2-volume-monitor
1 1460 /usr/lib/gnome-online-accounts/goa-daemon
1 1440 /usr/lib/ibus/ibus-portal
1 1435 /usr/lib/ibus/ibus-x11 --kill-daemon
1 1433 /usr/lib/ibus/ibus-dconf
1 1410 /usr/bin/pulseaudio --start --log-target=syslog
1 1410 /usr/bin/pulseaudio --start --log-target=syslog
1 1410 /usr/bin/pulseaudio --start --log-target=syslog
1 1371 /usr/bin/gnome-Shell
1 1352 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
1 1254 /usr/lib/gnome-session/gnome-session-binary --session=ubuntu
1 1254 /usr/lib/gnome-session/gnome-session-binary --session=ubuntu
1 12287 /home/carlerik/.sdkman/candidates/Java/current/bin/Java -classpath /usr/share/maven/boot/plexus-classworlds-2.x.jar -Dcl
1 1191 /lib/systemd/systemd --user
もっと賢く答えられたらいいのですが、ユーザーが設定したinotify(7)
ウォッチを数える唯一の方法は次のとおりです。
_find /proc/*/fd -user "$USER" -lname anon_inode:inotify \
-printf '%hinfo/%f\n' 2>/dev/null |
xargs cat | grep -c '^inotify'
_
_"$USER"
_を、情報が必要な実際のユーザーに変更します。現在のユーザーの_"`id -u`"
_。 _max_user_watches
_はユーザーごとの制限であり、プロセスごと、またはinotifyインスタンス/ファイル記述子ごとではないことに注意してください。
これは最初にinotify_init*(2)
によって作成されたすべてのオープンファイル記述子をfind
し、次に対応する_/proc/PID/fdinfo/FD
_ファイルを調べて、inotify_add_watch(2)
で追加されたウォッチ記述子に関する情報を探します。それぞれに(inotify固有のエントリの説明については、_/proc/[pid]/fdinfo/
_の下にある proc(5)
のマンページを参照してください)。 grep
の_-c
_オプションを使用すると、パターンに一致するすべての行の数を出力できます。
注:_inotify_watches
_のカウンターは、ユーザー名前空間構造から参照される_struct ucounts
_の他のユーザーごとのカウンターと同じように保持されます-参照 _include/linux/user_namespace.h
_ ;しかし、これらのカウンターをユーザーランドに公開するインターフェイスを見つけることができませんでした。