我有一个AWS EC2实例,想要安装inotify-tools.我通过执行命令添加了存储库:rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm然后执行yum install inotify-tools但得到没有包inotify工具可用.
请帮忙
我正在尝试使用fswatch从linux bash脚本翻译以下行,以便能够在Mac OSX上运行它:
inotifywait -r -m 'myfolder/' | while read MODFILE
do
echo "something"
done
Run Code Online (Sandbox Code Playgroud)
由于inotifywait在Mac OSX上不起作用,我想用第一行代替FSWatch.尽管README引用了fswatch手册页,但它没有提供链接,并且在互联网上搜索并没有给我任何东西.所以我试着搞砸了一下.
我创建了一个名为的文件夹testfswatch/,我尝试在父文件夹中运行以下命令,然后在文件夹中添加和更改文件testfswatch/:
fswatch -o testfswatch/ | echo "LALA"
fswatch -o testfswatch/ | someSimpleProgram
fswatch -o testfswatch/ | xargs -n1 -I{} echo "LALA"
fswatch -o testfswatch/ | xargs -n1 -I{} ./someExecutable
fswatch -o testfswatch/ | xargs -n1 echo "LALA"
fswatch -o testfswatch/ | xargs -n1 someExecutable
// And more variations of the above
Run Code Online (Sandbox Code Playgroud)
当我在tesfswatch/文件夹中更改或添加文件时,这些命令似乎都没有做任何事情.
有谁知道我在这里做错了什么?欢迎所有提示!
我有一个在docker-container中运行的脚本,它通过侦听目录中的更改inotifywait.该目录通过安装到主机系统docker -v.
出于某种原因,当更改此目录中的文件时,不会触发inotifywait.
这是有问题的脚本行
inotifywait -e create -e modify -e delete -e move /etc/nginx/sites-enabled
Run Code Online (Sandbox Code Playgroud)
容器就像这样启动(通过无花果)
web:
build: .
ports:
- "80:80"
volumes:
- ./conf:/etc/nginx/sites-enabled
Run Code Online (Sandbox Code Playgroud)
当我启动设置时fig up,执行脚本,但安装的卷中的更改不会触发inotify-barrier.
我有一个小脚本,用于监视文件的变化inotifywait.当某些内容发生变化时,会通过一个过程(编译,压缩,重组等)发送一批文件,这些过程大约需要十秒钟才能运行.
请考虑以下示例:
touch oli-test
inotifywait -mq oli-test | while read EV; do sleep 5; echo "$EV"; done
Run Code Online (Sandbox Code Playgroud)
如果你touch oli-test在另一个终端上运行几次,你会看到每个循环在它继续前完成.这种情况对我来说非常真实.如果我忘记在文件处理过程中忘记保存文件,或者发现错误,那么事件就会叠加,我等待几分钟.
令我感到震惊的是,有两种技术可以使这个工作流程更加客观.我不确定什么是最简单或最好的,所以我提出了两个:
中断以前的运行,并立即重启.脚本化进程目前只是一组内联命令.我可以将它们分解为Bash函数,我并不是想要将它们打破得更远.
对等待处理的事物列表进行去抖动,以便如果一次发生五个事件(或者它已经处理过),它只会再次运行.
(或两者......因为我确定有两种情况都有用的情况)
我也对不同的方法持开放态度,inotifywait但他们需要给我相同的结果并在Ubuntu上工作.
我有shell脚本与inotifwait设置如下:
inotifywait -r -e close_write,moved_to -m "<path>/upload" --format '%f##@@##%e##@@##%w'
Run Code Online (Sandbox Code Playgroud)
有一些docx文件驻留在监视目录中,一些脚本通过以下命令将docx转换为PDF:
soffice --headless --convert-to pdf:writer_pdf_Export <path>/upload/somedoc.docx --outdir <path>/upload/
Run Code Online (Sandbox Code Playgroud)
一旦生成PDF,就会以某种方式触发事件两次.参赛作品如下:
somedoc.pdf##@@##CLOSE_WRITE,CLOSE##@@##<path>/upload/
somedoc.pdf##@@##CLOSE_WRITE,CLOSE##@@##<path>/upload/
Run Code Online (Sandbox Code Playgroud)
还有什么不对吗?
问候
有人可以解释为什么inotifywait当我排除打开时仍然报告有关打开的文件吗?
mkdir /tmp/a
inotifywait --exclude acess,attrib,close_write,close_nowrite,close,open,moved_to,moved_from,move,delete,delete_self,unmount -r -m /tmp/a/
touch /tmp/a/test
/tmp/a/ OPEN test
/tmp/a/ CLOSE_NOWRITE,CLOSE test
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是是否创建了新文件或修改了当前文件。
我使用 CentOS 7,如果这有什么改变的话。
我有一个脚本来监视目录(递归)并在文件更改时执行命令。当监控标志如下使用时,这是正常工作的:
#!/bin/sh
inotifywait -m -r /path/to/directory |
while read path action file; do
if [ <perform a check> ]
then
my_command
fi
done
Run Code Online (Sandbox Code Playgroud)
但是,我想在启动时和后台运行它,所以天真地认为我可以将 -m 标志更改为 -d(作为守护进程运行 inotifywait,并包含一个 --outfile 位置),然后将其添加到 rc.local在启动时运行这个。我哪里错了?
我已经搜索了几个小时,似乎找不到该问题的最新答案
问题:显然 VirtualBox 正在 MacOS 上由 Docker 使用,并且它不希望将文件通知从主机操作系统传递到容器。因此,当从容器内执行这些操作时,inotifywait 只会通知监视文件夹上的文件活动。当这些操作是从主机执行时则不会。
Dockerfile
FROM python:3.9.6
COPY main.sh /bin/main.sh
RUN chmod +x /bin/main.sh
RUN apt-get update -y
RUN apt-get install -y inotify-tools
CMD /bin/main.sh
Run Code Online (Sandbox Code Playgroud)
主目录
#!/usr/bin/env bash
inotifywait -mq -r -e create -e modify -e delete -e move /data |
while read path action file; do
echo "The file '$file' appeared in directory '$path' via '$action'" >> log.txt
done
Run Code Online (Sandbox Code Playgroud)
构建容器
docker build -f Dockerfile -t my_container .
Run Code Online (Sandbox Code Playgroud)
运行容器
docker run -it -v …Run Code Online (Sandbox Code Playgroud) 我从linuxaria.com复制了这段代码作为示例,在我的情况下正常工作问题是当我从终端inotifywait停止时.我想要在退出终端后跑回地面.我怎么能这样做?
#!/bin/sh
# CONFIGURATION
DIR="/tmp"
EVENTS="create"
FIFO="/tmp/inotify2.fifo"
on_event() {
local date=$1
local time=$2
local file=$3
sleep 5
echo "$date $time Fichier créé: $file"
}
# MAIN
if [ ! -e "$FIFO" ]
then
mkfifo "$FIFO"
fi
inotifywait -m -e "$EVENTS" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %f' "$DIR" > "$FIFO" &
INOTIFY_PID=$!
while read date time file
do
on_event $date $time $file &
done < "$FIFO"
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来检查 5 个域的文档根目录以进行目录监视。
对于单个文件夹,它的工作方式是这样的
DIRECTORY_TO_WATCH = "/home/serveradmin/"
我有一个文件夹列表,需要为我的服务器递归检查这些文件夹。
我刚开始学习 python 并且有一些 C 语言的实践经验。刚刚开始学习发展。
有没有人可以帮我解决这个问题?我需要对名为 /tmp/folderlist.txt 的文件中提到的 5 个文件夹进行递归 inotify 监视
我可以参考的地方是否有任何类似的代码可用?
inotifywait ×10
inotify ×9
bash ×4
docker ×2
linux ×2
sh ×2
shell ×2
amazon-ec2 ×1
boot2docker ×1
centos ×1
debouncing ×1
fswatch ×1
interrupt ×1
macos ×1
monitor ×1
python ×1
yum ×1