Shell:如何确保在当前命令之后只执行一个命令重复

时间:2017-07-19 19:52:25

标签: shell locking pipe flock

我正在观看我的项目目录,以便在文件发生变化时更改文件并运行同步脚本。

当然,我不希望在第一次同步完成之前运行第二次同步。 flock实用程序似乎适合阻止第二次同步运行,如

fswatch -0 ./myproject | xargs -0 -n 1 "flock /tmp/my.lock ./container_update.sh

但是,它只是将下一个请求放入等待队列,因此如果我更改20个小文件,将运行20个同步。这可以通过flock -n来解决,如果无法获得锁定,它会立即退出,但是当同步正在进行时我将失去更改。

我尝试构建一个天真的单槽队列,其中一个新项目首先请求“队列”锁定,然后继续执行“主”锁定,只留下一个“队列”一个请求。它没有帮助;变更请求继续堆积。

fswatch ./myproject | xargs -0 -n 1 "flock -n /tmp/my-queue.lock flock /tmp/my-main.lock flock -u /tmp/my-queue.lock ./container_update.sh"

什么方法只能让一个“下一个”请求被执行?

P.S。 如果重要的话我在Mac上运行它,这个flock的实现应该与Linux的实现相同 - https://github.com/discoteq/flock

0 个答案:

没有答案