gpt4 book ai didi

linux - 以顺序方式处理并发作业

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:49 24 4
gpt4 key购买 nike

我正在编写一个 bash 脚本,它的多个实例可能同时运行。我正在努力防止这种情况发生。所以我使用 flock 机制来确保只有 1 个脚本实例在运行。其他实例等待轮到他们。

exec 200<$LOCK
flock -x 200
echo "secured flock $1"
sleep 10
echo "exit $1"

但是,使用这种方法无法保证执行顺序。例如:

# ~/proj/scripts $ sudo ./parallel.sh 2 &  
[2] 10668
# ~/proj/scripts $ sudo ./parallel.sh 3 &
[3] 10674
# ~/proj/scripts $ sudo ./parallel.sh 4 &
[4] 10681
# ~/proj/scripts $ sudo ./parallel.sh 5 &
[5] 10687
# ~/proj/scripts $ sudo ./parallel.sh 6 &
[6] 10696

secured flock 3 exit 3
secured flock 6 exit 6
secured flock 4 exit 4
secured flock 2 exit 2
secured flock 5 exit 5

我正在尝试看看是否有可能通过保证调用顺序来完成相同的并发保护

上面的例子只是过于简单化了。

这些进程通常会定期启动,比如每 5 秒启动一次。但有时可能需要超过 5 秒(比如 10 秒)才能完成执行。所以我可以肯定地说进程 2 将在进程 3 之前启动。但是如果进程 2 需要很长时间才能完成,那么就不能保证进程 4-6 将以相同的顺序启动,即使它们相隔大约 5 秒开始

最佳答案

有一个可以并行提交并随后串行执行作业的队列守护进程怎么样?

来自 https://www.gnu.org/software/parallel/man.html#EXAMPLE:-GNU-Parallel-as-queue-system-batch-manager

true >jobqueue; tail -n+0 -f jobqueue | parallel -j1

然后您可以每 5 秒提交一个作业,例如:

echo my_command my_arg >> jobqueue

关于linux - 以顺序方式处理并发作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com