队列 bash 脚本

Queue bash script

假设我有一个 bash 脚本,我希望在给定时间最多有一个实例。假设多次调用同一个 bash 脚本的预期行为是将它们的执行排队。

在脚本类似于函数的单个程序中,这可以通过互斥锁来实现。

我将如何处理这样的设计?

好的,即兴发挥...

在脚本中实现排队系统。

让脚本尝试mkdir一个已知的标准目录名称。

if mkdir /tmp/${0##*/}.Q
then : .. proceed normally

mkdir 是原子的,因此只有一个实例可以成功。
如果失败,请测试是否因为该目录已经存在。
如果没有,则有问题,报告并中止。
如果成功,则在以脚本的 PID 命名的目录中打开一个 FIFO,并在其中写入其命令行参数。也许添加 PID。
然后清除 args,fork a child 和 wait。在 SIGCHLD 上再次读取 FIFO。只要找到东西,lather/rinse/repeat。没有了就关机

如果 运行s 带有 args 但目录存在然后确认副本已经 运行ning 在另一个 PID 上,找到目录中的 FIFO,写入 args(可能是 PID)到那个, 然后退出。

如果它没有 args(可能因为它是一个分支child),读取管道,设置args,并处理它们。确认有一个副本 运行 匹配 FIFO 的 PID。处理完所有记录后,删除FIFO,正常退出

根本没有测试过这个。期待发现一些瑕疵。

OR 只需查找“flagfile”并循环休眠直到它不存在,然后创建它,运行 通常,然后删除它完成后再次。这并不能保证 order,但它确实保留了 运行ning.

的不止一份副本