对于SSH操作,捕获输出为空

时间:2014-06-30 14:33:23

标签: cloudera oozie

我正在使用Oozie 4.0.0运行一个简单的工作流程。我需要通过SSH操作运行bash脚本,然后捕获stdout。

这是xml:

<workflow-app name="Test" xmlns="uri:oozie:workflow:0.4">
    <start to="LS"/>
    <action name="LS">
        <ssh xmlns="uri:oozie:ssh-action:0.1">
            <host>user@host</host>
            <command>ls</command>
              <capture-output/>
        </ssh>
        <ok to="Mail"/>
        <error to="kill"/>
    </action>
    <action name="Mail">
        <email xmlns="uri:oozie:email-action:0.1">
            <to>myaddress@mail.com</to>
            <subject>Test mail</subject>
            <body>${wf:actionData('LS')}</body>
        </email>
        <ok to="end"/>
        <error to="kill"/>
    </action>
    <kill name="kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

邮件正文仅包含:

{}

使用shell操作的相同脚本没有问题,但我需要SSH操作。 我疯了,有人能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。 看到日志,我注意到SShActionExecutor查看了错误的stdout文件。这是我在日志中找到的命令

ssh -o PasswordAuthentication=no -o KbdInteractiveDevices=no -o StrictHostKeyChecking=no -o ConnectTimeout=20 workflow@redhat5 cat oozie-oozi/0000008-140708170302737-oozie-oozi-W/fileProcessing--ssh/22350.0000008-140708170302737-oozie-oozi-W@fileProcessing@1.stdout

但生成的stdout文件为/home/instadoc/oozie-oozi/0000008-140708170302737-oozie-oozi-W/fileProcessing--ssh/22350.0000008-140708170302737-oozie-oozi-W@fileProcessing@0.stdout

如果重新启动操作,则.stdout扩展名前面的ID可能会有所不同(例如:@ 9.stdout,@ 4.stdout),但SShActionExecutor始终位于@ 0.stdout。