运行多个脚本并继续,直到每个脚本完成

运行多个脚本并继续,直到每个脚本完成

我的问题是,我可以同时运行多个脚本吗?我可以访问具有 32 个 cpu 的集群,但同时我有 900 个脚本。现在我想做的是将每个脚本放入队列中,一旦一个脚本完成就启动另一个脚本。我不想做一个简单的循环,因为我希望所有(或几乎所有)CPU 并行运行。

答案1

看起来您正在寻找类似的东西GNU 并行实用程序。以下是其描述的摘录:

对于输入的每一行,GNU Parallel 将以该行作为参数执行命令。如果没有给出命令,则执行输入的行。多条线路将并行运行。

在您的情况下,您可以将自己限制为 32 个并发脚本,如下所示:

parallel -j32 ::: ./script1 ./script2 (...) ./script900

或者,您可以parallel从文件中读取脚本名称,或者如果所有运行都是同一脚本的实例,则仅将参数存储在输入文件中,等等;阅读文档以了解许多可能的变化。

答案2

如果您使用以下命令踢掉目录中的所有脚本,会发生什么情况:

for FILE in *.sh; do ./$FILE & done;

并让进程调度程序完成它的工作。

相关内容