SGE - QSUB无法以-sync模式提交作业
我有一个perl脚本,它准备文件以输入二进制程序,并将二进制程序的执行提交给SGE排队系统版本6.2u2。
使用
-sync y
选项提交作业,以允许父perl脚本使用waitpid函数监视已提交作业的状态。
这也非常有用,因为将SIGTERM发送到父perl脚本会将此信号传播给每个子节点,然后将这些信号转发到qsub,从而优雅地终止所有关联的提交作业。
因此,能够使用此-sync y
选项提交作业至关重要。
不幸的是,我一直收到以下错误:
Unable to initialize environment because of error: range_list containes no elements
请注意“容器”的拼写错误。那不是拼写错误。它只是向您展示了代码/错误消息的这个区域必须维护得多么糟糕。
产生此错误的尝试提交甚至无法生成STDOUT和STDERR文件*.e{JOBID}
和*.o{JOBID}
。提交完全失败了。
搜索谷歌此错误消息只会导致隐藏的留言板上的未解决的帖子。
甚至不能可靠地发生此错误。我可以重新运行我的脚本,相同的工作甚至不一定会产生错误。我尝试提交作业的节点似乎也无关紧要。
我希望有人可以解决这个问题。
因此,任何这些问题的答案都可以解决我的问题:
更新版本的SGE中是否会出现此错误?
我可以更改qsub的命令行选项以避免这种情况吗?
这个错误信息到底是怎么回事?
没有找到相关结果
已邀请:
2 个回复
好按紊叉
作业数量的限制。该参数称为
。我们版本中的默认值为99,上面的更改将默认值增加到1000。
的定义(来自sge_conf(5)手册页)是: 设置动态事件客户端的最大数量(由qsub -sync使用) y和Grid Engine DRMAA API库会话)。默认设置 到99.动态事件客户端的数量不应该更大 超过系统具有的文件描述符数量的一半。数字 文件描述符的共享在所有exec的连接之间共享 主机,所有事件客户端和qmaster所需的文件句柄。 您可以使用以下命令检查有多少动态事件客户端:
我们已经通过
添加了
到
。我已经测试了提交数百个
作业,我们不再遇到range_list错误。在
更改之前,这样做会可靠地触发错误。
冲汉
的单个实例保持在前台,因为它提交的作业仍然在队列中或正在运行。这是通过
选项实现的,但导致我在我的问题中描述的可怕的不可预测的错误。 这个问题的解决方案是使用
命令和
选项。这导致作业的行为类似于
,因为我的脚本可以通过在qrsh实例上使用
隐式监视提交的作业是否正在运行。 此解决方案的唯一警告是,您正在操作的队列不得在交互节点(由
提供)和非交互节点(由
访问)之间进行任何区分。如果存在区别(可能交互节点少于非交互节点),则此解决方法可能无济于事。 然而,由于我发现什么都没有找到解决问题的解决方案,这个问题在任何地方都是如此的功能,让这篇文章穿过互联网走向任何在我类似情况下陷入困境的灵魂。