2

我正在运行一个脚本,我想在其中检测 WebSphere MQ 版本,如果这个版本是 7.1,那么我想运行一个runmqsc来设置通道身份验证。我这样做:

   <if>
        <or>
            <os name ="AIX">
            <os name ="Linux">
        </or>
    <then>
        <loginfo>Checking the installed MQ version.</loginfo>
             <osexec commandbase="su" dir="/bin" mode="osexec">

            <args>
                  <arg value="-"/>
                          <arg value="- ${mq_admin_name}"/>
                          <arg value="-c"/>
                          <arg line="dspmqver | grep Version"/>

            </args>
             </osexec>

        <if>
             <not>
              <not>
               <contains casesensitive="yes" substring="7.1.0.0" string="${result.output}"/>
              </not>
             </not>
        <then>
           ...........
           ..........

在此之后,我使用runmqsc. 但问题是字符串{result.output}为空。该dspmqver命令未正确执行..有人可以建议为什么吗?

4

1 回答 1

0

dspmqver这篇文章的标题“如何在 ant 中检查 Websphere MQ 版本?”、未正确执行的结论以及缺少诊断信息之间存在一些不匹配。

  • 问题不在于如何在 Ant 中检查 WebSphere MQ 版本,而是如何在 Ant 中执行异常处理和诊断。
  • dspmqver不支持未正确执行的结论。显示的代码没有任何迹象表明它甚至可以执行dspmqver
  • 没有显示执行实际执行和设置result属性的代码部分。

我的建议如下:

  1. 验证osexec填充result.error. 我只是猜测如果存在result.output. 如果osexec不填充它,请使用它填充的内容STDERR或修改它以执行某些操作(STDERR如果尚未填充)。
  2. 右下角</osexec>,添加<loginfo>Call to dspmqver returned: STDOUT='${result.output}', STDERR='${result.error}'</loginfo>
  3. 如果没有返回任何内容,请删除grep. 如果它与搜索字符串不完全匹配,该dspmqver命令应该返回一些东西STDERRorSTDOUT并且将其过滤掉。grep
  4. dspmqver如果仍然没有返回任何内容,请挑战甚至正在执行的假设。如果是,它要么返回一些东西,要么剪切一个 FDC 文件。任何其他行为都将是一个错误,dspmqver并且无法通过 Ant 或响应这篇文章来解决。

基本上,分而治之。继续删除东西,直到你得到输出。这将隔离问题。打印有用的诊断信息,这样一旦你隔离了问题,你就会知道它是什么。

于 2012-11-01T17:47:01.903 回答