繁体   English   中英

按顺序运行作业而不是连续使用bash

[英]Run jobs in sequence rather than consecutively using bash

所以我在超级计算机上使用Gaussian 09(计算化学软件)做了很多工作。

要提交作业,请使用以下命令行

 g09sub input.com -n 2 -m 4gb -t 200:00:00

其中n是使用的处理器数量,m是请求的内存,t是请求的时间。

我想知道是否有办法编写一个脚本,将提交文件夹中的前10个.com文件,然后在每个完成时提交另一个.com文件。

我有一个脚本可以同时提交文件夹中的所有.com文件,但是我可以在我使用的超级计算机上排队的作业数量有限制。

当前的脚本看起来像

 #!/bin/bash 
 #SBATCH --partition=shared
 for i in *.com
        do g09sub $i -n 2 -m 4gb -t 200:00:00
 done

因此1.com,2.com,3.com等将同时提交。

我想要的是1.com,2.com,3.com,4.com,5.com,6.com,7.com,8.com,9.com和10.com都是从同一时间,然后每个完成另一个.com文件启动。 这样任何一个文件夹中的作业不会同时运行10个以上。

如果它有用,每个作业在完成时都会创建一个.log文件。

虽然我不确定它是否重要,但超级计算机使用PBS排队系统。

尝试xargs或GNU parallel

xargs

ls *.com | xargs -I {} g09sub -P 10 {} -n 2 -m 4gb -t 200:00:00

说明:

  • -I {}告诉{}代表输入文件名
  • -P 10一次设置最大作业

parallel

ls *.com | parallel -P 10 g09sub {} -n 2 -m 4gb -t 200:00:00 # GNU parallel supports -P too
ls *.com | parallel --jobs 10 g09sub {} -n 2 -m 4gb -t 200:00:00

说明:

  • {}表示输入文件名
  • --jobs 10一次设置最多工作

不确定超级计算机的可用性,但GNU bash手册在底部提供了3.2.6 GNU Parallel下的parallel示例。

有一些方法可以并行运行未构建到Bash中的命令。 GNU Parallel是一个可以做到这一点的工具。

...

最后,Parallel可用于并行运行一系列shell命令,类似于'cat file | 庆典”。 获取文件名列表,创建一系列shell命令以对其进行操作并将该命令列表提供给shell并不罕见。 并行可以加快速度。 假设该文件包含一个shell命令列表,每行一个,

parallel -j 10 < file

将使用shell评估命令(因为没有提供显式命令作为参数),一次只有10个shell作业块。


在我无法使用该选项的情况下,使用jobs功能的工作相当粗糙。 例如:

for entry in *.com; do
   while [ $(jobs | wc -l) -gt 9 ]; do
     sleep 1    # this is in seconds; your sleep may support 'arbitrary floating point number'
   done
   g09sub ${entry} -n 2 -m 4gb -t 200:00:00 & 
done

$(jobs | wc -l)计算在后台生成的作业数${cmd} &

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM