bash - 当我的 qsub 作业在服务器上完成时,如何自动运行 bash 脚本?

标签 bash ssh cluster-computing pbs qsub

我想在发送到服务器的所有作业完成后运行脚本。

比如我发送

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

然后我得到一份已启动的作业列表。我想在服务器上自动启动另一个脚本,以便在所有作业完成后处理这些作业的输出。

如果有任何建议可以帮助我避免以下不雅的解决方案,我将不胜感激:

如果我将上述调用中的 1000 个作业 ID 中的每一个保存在一个单独的文件中,我可以根据当前正在运行的作业列表检查每个文件的内容,即调用的输出:

ssh qstat

我只需要每半小时检查一次,但我认为有更好的方法。

最佳答案

这在一定程度上取决于您使用的作业调度程序和版本,但如果您的结果处理也可以在与作业相同的队列上完成,则也可以采用另一种方法。

在较新版本的扭矩(以及网格引擎和其他)中管理大量相关作业的一种非常方便的方法是将任何单个作业作为作业数组启动(参见 http://docs.adaptivecomputing.com/torque/4-1-4/Content/topics/commands/qsub.htm#-t )。这需要以某种方式将单个运行映射到数字,这可能方便也可能不方便;但如果你能为你的工作做到这一点,它确实会大大简化工作管理;你可以在一行中将它们全部 qsub,你可以一次全部 qdel 或 qhold(同时仍然能够单独处理作业)。

如果你这样做,那么你可以提交一个依赖于作业数组的分析作业,该作业只会在数组中的所有作业完成后运行:(参见 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/OGE)的语法不同,但思想是相同的。

要做到这一点需要付出一些努力,当然,Tristan 的方法具有简单的优点,并且可以与任何调度程序一起使用;但是,如果您要经常这样做,那么在这种情况下学习使用作业数组可能值得您花时间。

关于bash - 当我的 qsub 作业在服务器上完成时,如何自动运行 bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886168/

相关文章:

linux - 共享集群与采用 Intel(R)Core™ i7 的笔记本电脑之间的性能检查

ruby - 如何在 Rails 中设置 AWS ElastiCache 集群? (移动响应的问题)

windows - 检查远程文件是否存在,并在Expect脚本中执行其他操作

bash - 通过 ssh 传递变量不起作用

node.js - 连接到 Redis 集群失败

bash - 为多个命令使用用户/密码*一次*进行身份验证? ( session 多路复用)

java - 使用 SSH 和 Java 连接到 postgresql

linux - 在 Vim 中访问 Bash 脚本的返回值

linux - 获取换行符的数量并将每个换行符存储在变量中

bash - 从文本文件打印所有回文