我使用了一个消耗 inotify 手表的应用程序。我已经设置了
fs.inotify.max_user_watches=32768
Run Code Online (Sandbox Code Playgroud)
在/etc/sysctl.conf
但昨晚的应用程序停止索引,除非我手动运行它,这使我怀疑我的手表了。
由于我不知道增加这个数字时的权衡是什么(它会消耗更多 RAM 吗?),我不知道我是否应该增加这个数字,所以我想知道是否有办法让我可以判断它是否正在使用所有这些手表以及增加它的权衡是什么。
我刚刚安装了 Ubuntu 16.04,当我启动SmartGit时收到此警告:
IOException: User limit of inotify watches reached
Run Code Online (Sandbox Code Playgroud)
此外,我收到此警告启动tail -f
:
tail: inotify resources exhausted
tail: inotify cannot be used, reverting to polling
Run Code Online (Sandbox Code Playgroud)
我在 Ubuntu 14.04 上从来没有遇到过这个错误,我在新 Ubuntu 上使用的应用程序和文件与我在以前的版本中使用的完全一样。
唯一相关的区别是我在 PC 上添加了一个额外的硬盘,并配置了 Ubuntu 的备份工具。这个问题是否与第二个磁盘或备份工具有关?
几周前我遇到了一个相当奇怪的 Dropbox 问题。
Dropbox 将停止与“无法访问 Dropbox 文件夹”消息同步,并在我重新启动之前拒绝同步。
我试过重新启动 Dropbox 并注销,但我似乎没有做任何事情可以让它在重新启动后再次同步。
这不是权限问题,因为当我突然失去访问权限时权限不会改变。
我已经检查了 lsof 是否有任何与 dropbox 相关的东西,当我停止它时可能仍然挂起。据我所知,发生这种情况时,除了 Dropbox 正在访问它的文件夹之外,别无他法。
我知道已经有一些关于类似主题的讨论。但这就是我基本上想要做的。
我有一个名为 watch 的目录watched
,每当将文件添加到该目录时,我想触发一个名为的脚本syncbh.sh
,该脚本将从该目录中取出文件并将它们上传到远程服务器。
需要注意的是,文件是watched
由一个用户 (user2)在目录中创建的,但脚本由另一个用户 (user1) 执行。
我已经尝试使用incron来完成此操作,但一直遇到一个主要问题,因为虽然该脚本可以由具有 root 权限的 user1 手动执行,但实际上incron守护进程从未被其他 user2 的文件创建事件自动触发。
我已经考虑过inoticoming是否是更好的选择,但我不清楚它的语法是如何工作的。如果有更好的方法来实现这一点,或者如果我最终使用inocoming命令语法是什么,如果在该目录中创建/修改了文件,则要求它监视/home/user1/watched
目录并执行脚本/usr/local/bin/syncbh.sh
?
任何帮助将非常感激。
这个问题来自我在Stackoverflow 上提出的另一个问题。我正在使用Watcher - 同样的问题也适用于Incron - 来监视文件夹及其子文件夹的更改,并悄悄地将这些更改转移到 Dropbox。
我监视write_close
事件 - IN_CLOSE_WRITE
- 出于这个目的。本来我是在看modify
事件,即IN_MODIFY。虽然这行得通,但我发现在写入大文件时,它会触发不止一次。这听起来很公平,所以我改用了,IN_CLOSE_WRITE
因为我觉得假设对于给定的文件它只会发生一次是合理的。
然而,事实并非如此。即使对于在 Nano 中创建的非常小的文本文件(只有一个字符),该事件也会发生两次。当同一个文件在 Dropbox 上同步两次时,这充其量会导致不必要的流量。在我自己的情况下,它会导致灾难,因为在第一个事件中我执行同步然后删除服务器端文件。结果 - 在第二个事件中,Dropbox 侧文件变为 0 字节文件。
我现在正在处理这个问题,让我的同步脚本在我做任何其他事情之前休眠 10 秒,然后在尝试 Dropbox 同步之前检查有问题的文件是否仍然存在。这是有效的,因为在第二次迭代时文件丢失并且脚本刚刚终止。
这听起来充其量是骇人听闻的。也许不是一个糟糕的黑客,但我更愿意理解 - 为什么甚至IN_CLOSE_WRITE
事件发生不止一次?
一些附加信息
输出来自 ps ax|grep watcher.py
23880 ? Sl 0:01 python /usr/local/bin/watcher.py restart
24977 pts/0 S+ 0:00 grep --color=auto watcher.py
Run Code Online (Sandbox Code Playgroud)
文件系统是ext4
. 我应该提到,我遇到了与 Incron 完全相同的问题。我从通过/etc/rc2.d
. Incron OTH 通过其默认apt-get install incron …
所以,我正在尝试做这个有点简单的任务,但我还没有成功。我希望现在有所改变。
运行/var/www/lager-scanner/filer/pluk_script.py
每当有一个新的文件/var/www/lager-scanner/filer/Nav/FromNav
,并运行此作为www-data
用户。
有没有人可以告诉我怎么做?
中的所有文件夹/var/www
均归www-data
用户和组所有并具有775
权限。
所以我正在做一个简单的inotifywait
循环来观察 Bootstrap 目录中的变化:
while inotifywait -r -q --format %w bootstrap/; do
echo "something happened"
[[ $filename == *.js ]] && uglifyjs .....
[[ $filename == *.less ]] && lessc bootstrap.less
done
Run Code Online (Sandbox Code Playgroud)
您真的不需要担心内部结构,但我无法将文件名恢复到 bash 范围内。inotifywait
回显文件名(在格式参数的帮助下)但是我如何捕获它并在以后使用它(在我的情况下, as $filename
)?
如果您想要一个简单、简短的测试工具:
touch testfile
while inotifywait testfile do; echo "..."; done
Run Code Online (Sandbox Code Playgroud)
然后你可以touch testfile
在你想触发它时运行。
Evince(pdf 查看器)用于在我用 LaTeX 编译后重新加载我的 .pdf 文件。但是,这种行为最近已停止,以至于我必须手动重新加载 Evince (control + R) 以显示更改。我曾尝试重置桌面环境(即重新启动),但这无济于事。
关于如何解决此问题的任何想法?我的谷歌搜索给了我一个模糊的认识,即 Evince 依赖于其他服务(inotify?)来实现此功能,但我不确定如何准确诊断问题所在。
我想要我的 Ubuntu 显示器Folder A
。如果那里有.sh
文件,我想将该文件移动到Folder B
并在后台运行它。这可能吗?我应该用什么来实现它?
我正在使用的某些软件需要高于默认值的/proc/sys/fs/inotify/max_user_watches
. 我可以使用文本编辑器或从终端修改这个值,过了一会儿,一切都很好。但是,在重新启动计算机后(不仅仅是注销并再次登录,这很好用),该值已重置为 8192。
为什么会发生这种情况,我如何才能使更改永久化?
我编写了一个脚本来调用inotifywait
. 它工作得很好,但我有时想停止它。
如何停止最后一个inotifywait
实例?
我无法理解如何使用inotify_rm_watch
我理解的用于关闭它的。
7341 ? S 0:00 inotifywait -m /home/andy/Downloads/ --format %w
Run Code Online (Sandbox Code Playgroud) 我正在尝试让Inotify在 PHP7 上工作。我已经安装了所需的软件包:
sudo apt install php php-dev
Run Code Online (Sandbox Code Playgroud)
并使用 Pecl 安装 Inotify:
sudo pecl install inotify
Run Code Online (Sandbox Code Playgroud)
但它不起作用:
$ php -r "var_dump(function_exists('inotify_init'));"
bool(false)
Run Code Online (Sandbox Code Playgroud) 我尝试在 22.04 更新
Failed to allocate directory watch: Too many open files
Hit:1 https://download.docker.com/linux/ubuntu jammy InRelease
Hit:2 https://apt.releases.hashicorp.com jammy InRelease
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Hit:4 https://deb.nodesource.com/node_18.x jammy InRelease
sysctl fs.inotify.max_user_instances
fs.inotify.max_user_instances = 128
Run Code Online (Sandbox Code Playgroud)
应该是什么sysctl fs.inotify
样子?