使用扭矩,如果我使用具有特定参数的qsub运行作业,则作业结束并发生三件事。 1)我得到一个包含进程的stderr的file.eXXXX文件2)我得到一个包含进程标准输出的file.oXXXX文件3)我收到一封包含分配和退出状态等信息的电子邮件。
我希望将此状态信息放在.oXXXX和.eXXXX文件旁边的文件中,因为将100个电子邮件与100个作业输出文件关联起来非常困难,尤其是几天之后。我找不到内置的这种功能。但是我注意到我可以使用“qstat -f job-id”来获取与电子邮件中的信息非常相似的信息。但我在文档中没有看到运行qstat的延迟时间。
我在用qsub启动作业A之后考虑过,然后使用作业ID启动一个依赖作业B(qsub -W depend = ...),它将运行ID为A的“qstat -f”,进行通信id-A通过环境变量。但是,我不知道将来B工作会走多远。另外,如果作业B没有在与A相同的节点上运行,那么qstat能否找到正确的信息?
我的想法似乎令人费解。是不是有更容易/更好的方法来做到这一点?
我不认为这可以通过安装某种电子邮件监视器来完成,因为我在一台完全不同的计算机上读取了我的电子邮件,该计算机无法访问计算集群。
答案 0 :(得分:1)
要处理即使作业失败也获得输出的情况,请在PBS前导之后的批处理脚本顶部附近添加类似以下内容:
捕获“ qstat -f $ PBS_JOBID | grep resources_used”退出
这确保了无论何时由于任何原因退出脚本,都会执行引号中的scriptlet。由于PBS通过SIGTERM信号杀死您的工作,并且仅在脚本未响应前者而退出时才诉诸SIGKILL,因此您应该始终能够执行该陷阱。这也意味着您可以在脚本末尾删除qstat命令;陷阱也会被打到那里。
sh,bash和派生工具支持陷阱,但csh和派生工具不支持陷阱。