脚本,它将监视至少2个文件/目录中的更改,并且仅在它们都被修改时才执行第三个脚本



我有两个传感器,每个传感器在触发时在文本文件中创建一个条目。现在我需要一些东西来监视这两个文件(我也可以把它们放在两个目录中,如果有任何帮助的话),并且只有在上述两个文件/目录发生变化时才触发第三个脚本。我需要事件和通知之间的实时(或接近实时)。我已经找到了inotify-wait, fswatch, enter和其他一些工具,但所有这些工具都是在任何更改时触发的。

目前我正在尝试这个,但它不能正常工作:

#!/bin/bash
while inotifywait -e modify /home/user/triggerdir/ ;
do
if [ "inotifywait -e modify /home/user/triggerdir2/" ];
then
echo Alert | mail -n -s "test-notify SCRIPT HUZAAAA" user@gmail.com
else
# Don't do anything unless we've found one of those
:
fi
done

我在网上寻找类似的问题/解决方案,最接近的是这个,但它没有工作的答案。

既然您在这方面遇到了麻烦,您可以考虑使用一种简单的方法。

比起循环,我会把你的脚本放在crontab。每天,每小时,每分钟,只要你需要。如果你需要更频繁的循环,你可以循环,但要确保你至少睡一秒钟,对CPU好。

如果事件和通知之间有一分钟或更长时间是可以的,这应该是你所需要的:

#!/bin/bash
key=/some/safe/path/.hidden_filename 
[[ -e "$key" ]] || touch "$key" # make sure it exists
if [[ file1 -nt "$key" && file2 -nt "$key" ]]; then 
mail -n -s "test-notify SCRIPT HUZAAAA" user@gmail.com <<< "Alert!"
touch "$key"
fi

我已经黑了一些东西在一起,我需要它的工作,虽然是可怕的编码(可能不应该被称为)涉及3个脚本:脚本1:

#!/bin/bash
count=0
while :
do
{ inotifywait -e modify /home/user/triggerdir/ && let count="$count + 1"; } || exit 1
if [ "$count" -eq "2" ]; then
echo Alert | mail -n -s "Huzzah" user@gmail.com
/home/user/trigger2.sh &&
killall trigger.sh inotifywait
fi
done

脚本2:

#!/bin/bash
count=0
while :
do
{ inotifywait -e modify /home/user/triggerdir/ && let count="$count + 1"; } || exit 1
if [ "$count" -eq "2" ]; then
echo Alert | mail -n -s "Huzzah" user@gmail.com
/home/user/trigger.sh &&
killall trigger2.sh #Do something.
#        count=-250
fi
done

作为两个脚本生成bash/inotify进程,我每24小时运行一次cronjob,两个杀死使用此脚本的进程3:

#!/bin/bash
killall trigger2.sh trigger.sh inotifywait bash

欢迎任何改进的帮助,谢谢:)

最新更新