我要运行一个脚本时,所有的工作,我已经发送至一个服务器完成。

例如,我送

ssh server "for i in config*; do qsub ./run 1 $i; done"

和我回来清单的工作已开始。我想到自动启动的另一个脚本的服务器上处理输出从这些工作一旦完成。

我将感谢任何建议,这将有助于我避免以下不雅的解决方案:

如果我保存的每1000个工作id是从上面的电话在一个单独的文件,我可以检查的每个文件的内容对当前的工作,即输出的一个呼吁:

ssh qstat

我只需要检查每一个半小时,但我设想有一个更好的办法。

有帮助吗?

解决方案

它取决于什么工作计划程序使用哪个版本,但是还有另外一个方法,可以采取过如果你的结果处理,也可以在同一个队的工作。

一个很方便的方式管理大量的相关工作在更多的最新版本的扭矩(和与电网发动机和其他人)是启动任何个人的工作作为一个工作组(cf。 http://docs.adaptivecomputing.com/torque/4-1-4/Content/topics/commands/qsub.htm#-t).这需要映各个运行的数字以某种方式,它可以或不可以方便;但如果你可以做你的工作,并极大地简化管理的工作;你可以qsub他们都在一条线,可以qdel或qhold他们所有的一次(同时还有能力处理作业的独立).

如果你做这,然后你可以提交一份分析工作,其中有一个依赖性的系列工作,这将只运行一次所有的工作岗位阵列是完整的:(cf。 http://docs.adaptivecomputing.com/torque/4-1-4/Content/topics/commands/qsub.htm#dependencyExamples).提交工作看起来就像:

qsub analyze.sh -W depend=afterokarray:427[]

哪里analyze.sh 有脚本来做的分析,并427会的工作id组的工作,你展开。(第[]只意味着运行后,所有的是完成)。语法不同于其他的计划程序(例如,SGE/大毛),但想法是相同的。

获得这种权利可以采取一些这样做的,当然特里斯坦的做法的优点是简单并与之合作的任何调度器;但是学习使用工作数组在这种情况下,如果你会做很多的这个可值得你花时间。

其他提示

您可能会考虑的是让每个作业脚本都触摸一个专用文件夹中的文件名,例如 $i.jobdone, ,在您的主脚本中,您可以简单地使用 ls *.jobdone | wc -l 测试正确数量的作业。

您可以使用 等待 停止执行,直到完成所有作业。如果您循环等待特定的ID,您甚至可以收集所有退出状态和其他运行统计信息(当时所做的时间,当时完成的工作计数,随时完成)。

我会编写一个小C程序来进行等待和收集(如果您有可以上传和运行可执行文件的权限),但是您可以轻松地使用bash 等待 内置的目的大致相同,尽管灵活性较小。

编辑: :小例子。

#!/bin/bash

...
waitfor=''

for i in tasks; do
    task &
    waitfor="$waitfor $!"
done

wait $waitfor
...

如果您在后台运行此脚本,它不会打扰您,以及在此之后发生的任何事情 等待 当您的工作结束时,线路将运行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top