我最近开始学习使用Linux。我想在 bash shell 中编写一个脚本来在集群上运行串行作业。我一直在寻找有关如何编写此类脚本的提示和说明。我设法写了以下内容:
#!/bin/bash
#PBS -l nodes=1:ppn=8
#PBS -l walltime=1:00:00
#PBS -e test.err
#PBS -o test.log
cd /home/myuser/
echo "Running on host `hostname`"
echo "Time is `date`"
echo "Directory is `pwd`"
/home/myuser/comsol4.3b/bin/comsol batch -inputfile DF.mph -outputfile output.mph -batchlog out.log
最后一行调用程序(称为 COMSOL)来运行。我的代码中缺少的东西之一是命令“qsub”;我不知道如何将它与代码中的其余命令合并。谁能指导我如何修改通过“qsub”命令调用我正在使用的程序的行?
抱歉,如果我的问题如此简单,我花了很多时间试图让它发挥作用,但遗憾的是我做不到。
编辑:总而言之,如果我仅输入代码的最后一行,它将仅在主节点上运行,我不希望这样。我想要修改代码的最后一行,以便它使用我使用 PBS 行分配给它的资源,我应该怎么做?
根据记录,该命令qhost
显示有 250 个节点,每个节点的核心数从 4 核/节点到 16 核/节点不等
答案1
您没有具体说明您正在使用哪种集群软件,但根据您所询问的事实qsub
,我知道 GridEngine(及其衍生物)和 PBS 都使用该特定命令,所以让我们从这些命令开始。
我最熟悉 GridEngine (及其衍生产品),因此要使用该包提交命令,您需要执行类似的操作。
例子这是一个示例脚本,我们将其称为sample.bash
.
#!/bin/bash
echo "Working directory is $PWD"
要提交此脚本,您需要执行以下操作:
$ qsub sample.bash
要定位集群中的特定节点,您需要包含一组节点所独有的属性,以便 GridEngine 调度软件可以选择其中一个节点,并在其中一个节点上运行您的作业。