2013-04-05 44 views
6

将作业脚本提交给PBS排队系统时,自动或由用户指定壁挂时间,例如,通过在PBS作业脚本中获取壁挂时间

#PBS -l walltime=1:00:00 

问题是如果这个时间可以从作业脚本访问。有没有一个环境变量或其他方式来获得这个walltime。

最后,作业脚本应该不时决定是否有足够的时间做更多的工作,以便作业不会被排队系统消灭。

更新:

至少如果用户指定的walltime在资源列表,我可以提出以下解决方法(工作对于bash)

read _ _ PBS_WALLTIME <<< `qstat -f $PBS_JOBID | grep "Resource_List.walltime"` 

从解析walltime qstat输出并将值放入PBS_WALLTIME变量中。因此,命令

echo $PBS_WALLTIME 

将产生类似

1:00:00 
+0

在PBS 4.2.8(可能还有其他版本)中,$ PBS_WALLTIME变量以秒为单位存储挂壁时间,所以'echo'将输出'3600'而不是'1:00:00'。 – MasterHD 2015-09-07 08:36:48

回答

5

这是存储在环境变量$ PBS_WALLTIME。

当然,这是TORQUE,我不确定你正在使用哪个PBS排队系统。

+0

当然,这取决于我正在使用的集群。一个运行TORQUE和另一个PBS Pro。不幸的是,即使在TORQUE集群上,$ PBS_WALLTIME变量也没有定义。所以这可能不是标准。 – dastrobu 2013-04-12 14:34:52

+0

什么版本的TORQUE? – dbeer 2013-04-12 17:20:56

+0

我不确定,如果我能正确回答这个问题。我如何获取版本信息?可能你要求PBS版本设置为2.1.10(取自'qmgr -c“打印服务器''的输出)。 – dastrobu 2013-04-14 20:50:34

1

我一直在寻找答案,上面的评论给了我一个想法,似乎工作得很好。您可以使用了qstat和使用sed抓住从它的相关信息:

qstat -f $PBS_JOBID | sed -rn 's/.*Resource_List.walltime = (.*)/\1/p' 

把这个在你的PBS脚本将打印出来的值,你可以使用标准的bash来的这个输出存储在一个变量:

WALLTIME=$(qstat -f $PBS_JOBID | sed -rn 's/.*Resource_List.walltime = (.*)/\1/p') 

您也可以使用它来获取PBS_ *环境变量中不可用的其他信息,例如为作业分配的内存量以及其他可能的东西。