【发布时间】:2018-03-30 12:43:30
【问题描述】:
使用扭矩,如果我使用带有特定参数的 qsub 运行作业,则作业完成并发生三件事。 1) 我得到一个包含进程标准错误的 file.eXXXX 文件 2) 我得到一个包含进程标准输出的 file.oXXXX 文件 3) 我收到一封电子邮件,其中包含分配和退出状态等信息。
我希望将此状态信息放在 .oXXXX 和 .eXXXX 文件旁边的文件中,因为很难将 100 封电子邮件与 100 多个作业输出文件关联起来,尤其是几天后。我找不到这样的内置功能。不过我注意到我可以使用“qstat -f job-id”来获取与电子邮件中的信息非常相似的信息。但我没有在文档中看到运行 qstat 允许延迟多长时间。
我想在使用 qsub 启动作业 A 后,使用作业 ID 启动一个依赖作业 B (qsub -Wdepend=...),它将运行 A 的 id 的“qstat -f”,进行通信id-A 通过环境变量。但是,我不知道未来工作B会跑多远。另外,如果作业 B 与 A 不在同一节点上运行,qstat 是否能够找到正确的信息?
我的想法似乎很复杂。没有更简单/更好的方法吗?
我认为这不能通过安装某种电子邮件监视器来完成,因为我在完全不同的机器上阅读我的电子邮件,它无法访问计算集群。
【问题讨论】:
-
如果您只需要知道作业是否正常完成,您可以在作业脚本末尾添加
echo Success,并在.oXXXXXX文件中检查该行。跨度> -
是的,当然我可以检查输出文件以确定它是否成功完成,但最好将电子邮件中的信息与实际工作输出(例如资源)相关联。检查使用了多少时间而不是请求了多少时间可能会很好。即,电子邮件中(在电子邮件阅读主机上)存在潜在有用的信息,这些信息无法与计算主机上的输出文件轻松关联。
-
在作业结束时,虽然它仍在运行,但
qstat -f的输出已经包含resources_used参数中的信息。当作为作业脚本的最后一行执行时,qstat -f $PBS_JOBID | grep resources_used之类的内容可能会起作用。 -
这是个好主意,德米特里。它部分地解决了这个问题。我可以得到 qstat -f $PBS_JOBID 的输出,找到以“Output_Path =”为前缀的行来获取输出文件的名称(警告首先解开行,因为 qstat -f 烦人地换行),并替换 .oXXXX 扩展名使用 .sXXXX 然后将 qstat -f 的输出转储到该文件。这会处理作业成功完成的情况。但是,如果作业未能成功完成,它也无济于事。在这种情况下,我仍然只会收到一封不相关的电子邮件。