I have a service which is sporadically publishing content in a certain server-side directory via rsync
. When this happens I would like to trigger the execution of a server-side procedure.
Thanks to the inotifywait
command it is fairly easy to monitor a file or directory for changes. I would like however to be notified only once for every burst of modifications, since the post-upload procedure is heavy, and don't want to execute it for each modified file.
It should not be a huge effort to come up with some hack based on the event timestamp… I believe however this is a quite common problem. I was not able to find anything useful though.
Is there some clever command which can figure out a burst? I was thinking of something I can use in this way:
inotifywait -m "$dir" $opts | detect_burst --execute "$post_upload"
Best Answer
Drawing on your own answer, if you want to use the shell
read
you could take advantage of the-t
timeout option, which sets the return code to >128 if there is a timeout. Eg yourburst
script can become, loosely:You may want to start with an initial blocking read to avoid detecting an end of burst at the start.