【问题标题】:how to get status of finished or aborted jobs in qsub/torque如何在 qsub/torque 中获取已完成或中止作业的状态
【发布时间】: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 的输出转储到该文件。这会处理作业成功完成的情况。但是,如果作业未能成功完成,它也无济于事。在这种情况下,我仍然只会收到一封不相关的电子邮件。

标签: qsub torque


【解决方案1】:

要处理即使作业失败也能获得输出的情况,请在 PBS 序言之后的批处理脚本顶部附近添加类似这样的内容:

trap "qstat -f $PBS_JOBID | grep resources_used" EXIT

这确保了每当脚本因任何原因退出时,引号中的 scriptlet 都会被执行。由于 PBS 会使用 SIGTERM 信号终止您的工作,并且仅在您的脚本没有响应前者退出时才诉诸 SIGKILL,因此您应该始终能够执行该陷阱。这也意味着您可以删除脚本末尾的 qstat 命令;陷阱也会被击中。

sh、bash 和衍生物支持陷阱,但 csh 和衍生物不支持。

【讨论】:

  • 嗨查尔斯,只是为了澄清你的答案,你假设脚本在哪个shell中?我认为您以某种方式假设了一个特定的外壳并以该外壳的语法设置了一个信号处理程序,对吗?
  • 嗨,Jim,sh、bash 和 ksh 支持内置陷阱,但 csh 和衍生工具不支持。感谢收看;我更新了我的答案。
猜你喜欢
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多