Dav*_*uer 5 ssh bash cluster-computing qsub pbs
我想在发送到服务器的所有作业完成后运行脚本.
例如,我发送
ssh server "for i in config*; do qsub ./run 1 $i; done"
Run Code Online (Sandbox Code Playgroud)
然后我找回已启动的工作列表.我希望在服务器上自动启动另一个脚本,以便在完成所有这些作业后处理这些作业的输出.
我将不胜感激任何有助于我避免以下优雅解决方案的建议:
如果我将上述调用中的1000个作业ID中的每一个保存在一个单独的文件中,我可以根据当前正在运行的作业列表检查每个文件的内容,即从调用输出到:
ssh qstat
Run Code Online (Sandbox Code Playgroud)
我只需每半小时检查一次,但我想有更好的方法.
您可能会考虑的是让每个作业脚本只触摸专用文件夹中的文件名$i.jobdone,在主脚本中,您可以简单地使用它ls *.jobdone | wc -l来测试所完成的正确数量的作业.
这取决于您使用的作业调度程序和版本,但如果您的结果处理也可以在与作业相同的队列上完成,那么还可以采用另一种方法.
在最新版本的扭矩(以及使用网格引擎等)中管理大量相关工作的一种非常方便的方法是将任何单个作业作为作业阵列启动(参见http://docs.adaptivecomputing.com/torque) /4-1-4/Content/topics/commands/qsub.htm#-t).这需要以某种方式将单个运行映射到数字,这可能是也可能不方便; 但如果你可以为你的工作做到这一点,它确实大大简化了工作的管理; 你可以将它们全部排成一行,你可以一次qdel或qhold它们(虽然仍然有能力单独处理工作).
如果这样做,那么您可以提交一个分析作业,该作业依赖于作业阵列,只有在阵列中的所有作业完成后才会运行:(参见http://docs.adaptivecomputing.com/torque /4-1-4/Content/topics/commands/qsub.htm#dependencyExamples).提交工作看起来像:
qsub analyze.sh -W depend=afterokarray:427[]
Run Code Online (Sandbox Code Playgroud)
其中analyze.sh有脚本进行分析,427将是您启动的作业数组的作业ID.([]表示仅在完成所有操作后才运行).其他调度程序(例如,SGE/OGE)的语法不同,但思路是相同的.
做到这一点可以采取一些措施,当然Tristan的方法具有简单的优点,并且可以与任何调度程序一起工作; 但是在这种情况下学习使用工作阵列,如果你要做很多这样的话可能值得花时间.
| 归档时间: |
|
| 查看次数: |
9693 次 |
| 最近记录: |