有没有办法将工作流的持续时间与完成电子邮件一起通过电子邮件发送? 有没有我可以使用的变量?
我认为这样的变量不可用。但是如果需要,您可以使用外壳操作来执行此操作。在工作流启动期间,执行 shell 脚本作为启动时间并将其保存在变量中。在工作流程完成时,只需在您的电子邮件操作之前完成另一个 shell 脚本,该脚本将计算当前时间 - 开始时间并在您的电子邮件中使用它。但这会使您的工作流程变得肮脏
这是Oozie的一个显着缺点。 我们的每个工作流都从一个 shell 操作开始,该操作调用一个简单的 bash 脚本来获取时间戳。
<action name="start-time">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>utc-time.sh</exec>
<file>../common/utc-time.sh#utc-time.sh</file>
<capture-output/>
</shell>
<ok to="the-first-actual-action"/>
<error to="fail"/>
</action>
这可以通过 Java EL 在我们完成后发送的电子邮件中进行测试,错误,如下所示:
<action name="email">
<email xmlns="uri:oozie:email-action:0.1">
<to>${emailsToAlert}</to>
<subject>COMPLETED: ${wf:name()}</subject>
<body>
Workflow ID: ${wf:id()}
Workflow Name: ${wf:name()}
Workflow app path: ${wf:appPath()}
Start Time: ${wf:actionData('start-time')['time']}
End Time: ${timestamp()}
</body>
</email>
<ok to="end"/>
<error to="fail"/>
</action>
获取持续时间是另一个跳过箍练习,涉及将开始和结束时间传递给 bash 脚本。
我正在调查Oozie SLA功能,但我还没有找到提取数据的方法。