我们在Oozie工作流程工作下提交。它在Windows集群中执行,但在Linux中它失败了。
<workflow-app xmlns='uri:oozie:workflow:0.3' name='shell-wf'>
<start to='shell1' />
<action name='shell1'>
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>Java</exec>
<argument>A</argument>
<argument>B</argument>
<file>${EXEC}#${EXEC}</file> <!--Copy the executable to compute node's current working directory -->
</shell>
<ok to="end" />
<error to="fail" />
</action>
<kill name="fail">
<message>Script failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name='end' />
</workflow-app>
但是当我执行上面的工作流文件时,抛出异常无法运行java程序。没有这样的文件或目录。
答案 0 :(得分:0)
如果shell脚本存在shell操作,并且shell脚本中的任何命令都失败,则必须在shell脚本中添加行#!/bin/bash -e
以捕获转换的失败代码。然后它将在输出中捕获,只有您的工作流程将被终止。否则,即使shell操作可能失败,它也会退出成功。