我有一个服务,通过rsync偶尔在某个服务器端目录中发布内容.当发生这种情况时,我想触发服务器端程序的执行.
由于inotifywait命令,监视文件或目录以进行更改非常容易.但是,我希望每次突发修改只通知一次,因为上传后的过程很繁重,并且不想为每个修改过的文件执行它.
根据事件时间戳提出一些黑客攻击不应该是一项巨大的努力……我相信这是一个非常普遍的问题.虽然我找不到任何有用的东西.
是否有一些聪明的命令可以找出爆发?我在考虑以这种方式使用的东西:
inotifywait -m "$dir" $opts | detect_burst --execute "$post_upload"
解决方法:
根据您自己的答案,如果您想使用shell读取,您可以利用-t timeout选项,如果存在超时,则将返回代码设置为> 128.例如,您的爆发脚本可以松散地变为:
interval=$1; shift
while :
do if read -t $interval
then echo "$REPLY" # not timeout
else [ $? -lt 128 ] && exit # eof
"$@"
read || exit # blocking read infinite timeout
echo "$REPLY"
fi
done
您可能希望从初始阻塞读取开始,以避免在开始时检测到突发结束.