我正在使用 centos 集群,在其中运行 LAMMPS 软件进行模拟。现在我必须在一个文件夹中运行多个文件,现在每个文件都有类似类型的子文件,即它们包含 3 个文件 1. 输入数据文件(file.restart.3500000) 2. 脚本(in.open) 3. PBS 文件(to在子节点而不是主节点上运行代码)。
我的需要是使用单个命令运行文件夹中的所有文件,该命令过于并行而不是串行。即我希望系统同时运行所有文件,而不是第一个文件完成后启动第二个文件。
目前,我必须转到各个文件夹并运行脚本,这非常耗时,因为我必须执行多个文件。
要运行该文件,我在文件夹中发出“ qsub runme.pbs ”命令一次。由于所有文件的内容都是相同的,所以可以对此做些什么吗?
PS:- 我只是 Linux 这个领域的初学者,所以任何帮助都会非常有用。
答案1
您可以使用一个简单的 for 循环来运行它们,如下所示:
cd /path/to/wherever
for d in D_[0-9]*/; do
cd "$d"
qsub runme.pbs
cd ..
done
qsub
将每个作业提交到作业队列,集群将按照调度程序允许的方式运行它们。
或者,使用pushd "$d"
andpopd
代替cd "$d"
and cd -
。
qsub
在后台运行每个程序可能会有一些微小的好处(使用qsub runme.pbs &
),但可能不会,这更有可能使调度程序超载,同时处理太多工作并减慢速度。