在附件的 oozie 电子邮件操作中根据日期传递变量
Passing variable based on date in oozie email action for attachments
我正在使用 oozie
发送带附件的电子邮件。我正在做下面的事情。
<workflow-app name="Email" xmlns="uri:oozie:workflow:0.5">
<start to="email-0fdf"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="email-0fdf">
<email xmlns="uri:oozie:email-action:0.2">
<to>xxxxxxxxxxxxxxx@xxxxx</to>
<subject>job success</subject>
<content_type>text/plain</content_type>
<attachment>/user/XXXX/logs/2017-05-03/exec.log</attachment>
</email>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
</workflow-app>
现在在 <attachment>/user/XXXX/logs/2017-05-03/exec.log</attachment>
附近的工作流程中,日期总是会更改。
我如何传递变量,以便在调用工作流时发送特定日期的附件。
edited question.
我的shell脚本:
#!/bin/bash
TIMESTAMP=`date "+%Y-%m-%d"`
path=/user/$USER/logging/${TIMESTAMP}/status/${TIMESTAMP}.fail_log
path1=/user/$USER/logging/`date -d "-1 days" '+%Y-%m-%d'`/status/`date -d "-1 days" '+%Y-%m-%d'`.fail_log
echo filePath=$path
echo filePath1=$path1
我的新工作流程:
<workflow-app name="My_Workflow" xmlns="uri:oozie:workflow:0.5">
<start to="shell-05e6"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="shell-05e6">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>shell.sh</exec>
<file>/user/xxxxx/oozie/email/lib/shell.sh#shell.sh</file>
<capture-output/>
</shell>
<ok to="email-66c2"/>
<error to="Kill"/>
</action>
<action name="email-66c2">
<email xmlns="uri:oozie:email-action:0.2">
<to>myemail@mycompany.com</to>
<subject>job status</subject>
<body>job status ${wf:actionData('shell-05e6')['filePath']}</body>
<content_type>text/plain</content_type>
<attachment>${wf:actionData('shell-05e6')['filePath']},${wf:actionData('shell-05e6')['filePath1']}</attachment>
</email>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
现在,如果其中一个位置没有文件,请说 filepath
或 filepath1
,则电子邮件操作失败。
我想要的是不管文件是否存在 我希望电子邮件操作成功
写入shell动作。
#!/bin/sh
#Need to write a code to find out file path. and assign to "fP".
echo "filePath=$fP" #Here "fP" is dynamically assign file path.
您可以捕获 shell 脚本的输出并将其传递给电子邮件操作。在 shell 脚本中,像 'filePath=$fP' 一样回显 属性 并在 shell 操作中添加捕获输出元素。这将使您可以从 shell 脚本中捕获文件路径。在电子邮件操作中,您可以将捕获的变量作为参数传递为 ${wf:actionData('shellAction')['filePath']} 其中 shellAction 是 shell 操作名称.
电子邮件操作:
<attachment>${wf:actionData('shellAction')['filePath']}</attachment>
可能有两种方法来解决新的需求。
方法 #1
在 shell 操作和电子邮件操作
之间添加条件操作
Shell 动作就像:
path=/user/$USER/logging/${TIMESTAMP}/status/${TIMESTAMP}.fail_log
path1=/user/$USER/logging/`date -d "-1 days" '+%Y-%m-%d'`/status/`date -d "-1 days" '+%Y-%m-%d'`.fail_log
if [ -e "$path" ] && [ -e "$path1"]
then
echo filePath=$path,$path1
elif [ -e "$path" ]
then
echo filePath=$path
elif [ -e "$path1" ]
then
echo filePath=$path1
else
echo filePath=""
fi
有条件的动作就像:
if filePath = "" then
call email_0 action # which has NO attachment tag.
else
call email_2 action # which has attachment tag with two files.
end if
在条件操作下方,您将有两个电子邮件操作。
- 带有附件标签“
<attachment>${wf:actionData('shell-05e6')['filePath']}</attachment>
”和
- 没有附件标签
方法#2 无条件操作。
Shell 动作就像:
path=/user/$USER/logging/${TIMESTAMP}/status/${TIMESTAMP}.fail_log
path1=/user/$USER/logging/`date -d "-1 days" '+%Y-%m-%d'`/status/`date -d "-1 days" '+%Y-%m-%d'`.fail_log
if [ -e "$path" ] && [ -e "$path1"]
then
echo filePath=$path,$path1
elif [ -e "$path" ]
then
echo filePath=$path
elif [ -e "$path1" ]
then
echo filePath=$path1
else
echo filePath="/user/$USER/logging/No_Status_log.fail_log" # this is default file with no data. You have to create it only one time.
fi
在这种方法中,即使没有可用数据,也会始终附加一个文件。
我正在使用 oozie
发送带附件的电子邮件。我正在做下面的事情。
<workflow-app name="Email" xmlns="uri:oozie:workflow:0.5">
<start to="email-0fdf"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="email-0fdf">
<email xmlns="uri:oozie:email-action:0.2">
<to>xxxxxxxxxxxxxxx@xxxxx</to>
<subject>job success</subject>
<content_type>text/plain</content_type>
<attachment>/user/XXXX/logs/2017-05-03/exec.log</attachment>
</email>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
</workflow-app>
现在在 <attachment>/user/XXXX/logs/2017-05-03/exec.log</attachment>
附近的工作流程中,日期总是会更改。
我如何传递变量,以便在调用工作流时发送特定日期的附件。
edited question.
我的shell脚本:
#!/bin/bash
TIMESTAMP=`date "+%Y-%m-%d"`
path=/user/$USER/logging/${TIMESTAMP}/status/${TIMESTAMP}.fail_log
path1=/user/$USER/logging/`date -d "-1 days" '+%Y-%m-%d'`/status/`date -d "-1 days" '+%Y-%m-%d'`.fail_log
echo filePath=$path
echo filePath1=$path1
我的新工作流程:
<workflow-app name="My_Workflow" xmlns="uri:oozie:workflow:0.5">
<start to="shell-05e6"/>
<kill name="Kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="shell-05e6">
<shell xmlns="uri:oozie:shell-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<exec>shell.sh</exec>
<file>/user/xxxxx/oozie/email/lib/shell.sh#shell.sh</file>
<capture-output/>
</shell>
<ok to="email-66c2"/>
<error to="Kill"/>
</action>
<action name="email-66c2">
<email xmlns="uri:oozie:email-action:0.2">
<to>myemail@mycompany.com</to>
<subject>job status</subject>
<body>job status ${wf:actionData('shell-05e6')['filePath']}</body>
<content_type>text/plain</content_type>
<attachment>${wf:actionData('shell-05e6')['filePath']},${wf:actionData('shell-05e6')['filePath1']}</attachment>
</email>
<ok to="End"/>
<error to="Kill"/>
</action>
<end name="End"/>
现在,如果其中一个位置没有文件,请说 filepath
或 filepath1
,则电子邮件操作失败。
我想要的是不管文件是否存在 我希望电子邮件操作成功
写入shell动作。
#!/bin/sh
#Need to write a code to find out file path. and assign to "fP".
echo "filePath=$fP" #Here "fP" is dynamically assign file path.
您可以捕获 shell 脚本的输出并将其传递给电子邮件操作。在 shell 脚本中,像 'filePath=$fP' 一样回显 属性 并在 shell 操作中添加捕获输出元素。这将使您可以从 shell 脚本中捕获文件路径。在电子邮件操作中,您可以将捕获的变量作为参数传递为 ${wf:actionData('shellAction')['filePath']} 其中 shellAction 是 shell 操作名称.
电子邮件操作:
<attachment>${wf:actionData('shellAction')['filePath']}</attachment>
可能有两种方法来解决新的需求。
方法 #1 在 shell 操作和电子邮件操作
之间添加条件操作Shell 动作就像:
path=/user/$USER/logging/${TIMESTAMP}/status/${TIMESTAMP}.fail_log
path1=/user/$USER/logging/`date -d "-1 days" '+%Y-%m-%d'`/status/`date -d "-1 days" '+%Y-%m-%d'`.fail_log
if [ -e "$path" ] && [ -e "$path1"]
then
echo filePath=$path,$path1
elif [ -e "$path" ]
then
echo filePath=$path
elif [ -e "$path1" ]
then
echo filePath=$path1
else
echo filePath=""
fi
有条件的动作就像:
if filePath = "" then
call email_0 action # which has NO attachment tag.
else
call email_2 action # which has attachment tag with two files.
end if
在条件操作下方,您将有两个电子邮件操作。
- 带有附件标签“
<attachment>${wf:actionData('shell-05e6')['filePath']}</attachment>
”和 - 没有附件标签
方法#2 无条件操作。
Shell 动作就像:
path=/user/$USER/logging/${TIMESTAMP}/status/${TIMESTAMP}.fail_log
path1=/user/$USER/logging/`date -d "-1 days" '+%Y-%m-%d'`/status/`date -d "-1 days" '+%Y-%m-%d'`.fail_log
if [ -e "$path" ] && [ -e "$path1"]
then
echo filePath=$path,$path1
elif [ -e "$path" ]
then
echo filePath=$path
elif [ -e "$path1" ]
then
echo filePath=$path1
else
echo filePath="/user/$USER/logging/No_Status_log.fail_log" # this is default file with no data. You have to create it only one time.
fi
在这种方法中,即使没有可用数据,也会始终附加一个文件。