运行具有暂停条件的脚本



也许我想要的甚至是不可能的,但让我们看看。我需要运行一个 Linux 命令行:

(cd /packages/test/import/lisbon.stuck;ls;cd) | while read f ; do
    mv /packages/test/import/lisbon.stuck/$f /packages/test/import/lisbon/
    sleep 0.2
done

我需要做的是获取运行此命令的脚本,但是当/packages/test/import/lisbon/中的文件数达到 1000 时暂停脚本,并在文件数下降到 100 时从脚本返回。这可能吗?

while 循环中的 mv 命令之后,您可以检查 /packages/test/import/lisbon/ 中有多少个文件,如果超过 1000 个,请休眠一会儿,然后再次检查,如果小于 100,继续将更多文件移动到此目录中。

更好的解决方案是让从您监视的目录中删除文件的脚本将SIGSTOPSIGSTOP发送到您的脚本以控制文件流入目录,但以下功能是有效的,如果效率有点低。

block_until_emptier () {
    files=( /packages/test/import/lisbon/* )
    if (( ${#files[@]} > 1000 )); then
        while (( ${#files[@]} >100 )); do
            sleep 0.2
        done
    fi
}
while true ; do
    block_until_emptier /packages/test/import/lisbon
    for f in /packages/test/import/lisbon.stuck/*; do
        mv /packages/test/import/lisbon.stuck/$f /packages/test/import/lisbon/
    done
done

我相信 inotify(7) 可以帮到你。您应该考虑 incron,它使您能够在目录更改时运行一些脚本!

相关内容

  • 没有找到相关文章

最新更新