我想在发送到服务器的所有作业完成后运行脚本.
例如,我发送
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)
我只需每半小时检查一次,但我想有更好的方法.
我试图调整一些bash脚本,使它们在(pbs)集群上运行.
各个任务由几个由主脚本启动的脚本执行.到目前为止,这个主要脚本在后台启动多个脚本(通过附加&),使它们在一个多核机器上并行运行.我希望用qsubs 代替这些调用来分配集群节点的负载.
但是,有些工作依赖于其他工作才能开始.到目前为止,这是通过wait主脚本中的语句实现的.但是使用Grid Engine的最佳方法是什么?
我已经在手册页中找到了这个问题和-W after:jobid[:jobid...]文档,qsub但我希望有更好的方法.我们正在谈论几个并行运行的thousend作业和另一个相同大小的一组,以便在最后一个完成之后同时运行.这意味着我必须根据很多工作排队很多工作.
我可以通过在中间使用虚拟作业来减少这种情况,除了取决于第二组可能依赖的第一组作业之外什么都不做.这会将依赖数量从数百万减少到数千,但仍然是:它是错误的,我甚至不确定shell是否会接受如此长的命令行.
qwait -u <user>)?qwait [-p <PID>])?当然可以在循环中使用qstat和编写这样的东西,但我想这个用例非常重要,有一个内置的解决方案,我只是无法想出那个.sleepwhile
在这种情况下你会推荐/使用什么?
附录一:
由于在评论中要求:
$ qsub --version
version: 2.4.8
Run Code Online (Sandbox Code Playgroud)
也许也有助于确定准确的pbs系统:
$ qsub --help
usage: qsub [-a date_time] [-A account_string] [-b secs]
[-c [ none | { enabled | periodic | shutdown |
depth=<int> | dir=<path> | interval=<minutes>}... ] …Run Code Online (Sandbox Code Playgroud)