ExecuteStreamCommand Processor
描述
ExecuteStreamCommand 处理器提供了一种将外部命令和脚本集成到 Lynxus 数据流中的灵活方法。 ExecuteStreamCommand 可以将传入的 FlowFile 的内容传递给它执行的命令,其执行方式与管道的工作方式类似。
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| Working Directory | | 执行命令时用作当前工作目录的目录 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Command Path | | 指定要执行的命令; 如果仅提供可执行文件的名称,则它必须位于用户的环境 PATH 中。 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Command Arguments Strategy | Command Arguments Property |
| 配置提供给命令的参数的策略。 |
| Command Arguments | | 提供给由“;”分隔的可执行文件的参数 特点。 支持表达式语言:是(使用 FlowFile 属性与环境/系统变量求值) | |
| Argument Delimiter | ; | 用于分隔命令参数的分隔符 [默认值:;]。 必须是单个字符 | |
| Ignore STDIN | false |
| 如果为 true,则传入 FlowFile 的内容将不会传递给正在执行的命令 |
| Output Destination Attribute | | 如果设置,流命令的输出将被放入原始 FlowFile 的属性中,而不是单独的 FlowFile。将不再有 'output stream' 或 'nonzero status' 的关系。此属性的值将是输出属性的键。 | |
| Max Attribute Length | 256 | 如果将流命令的输出路由到属性中,则放入属性值的字符数最多为此数量。这很重要,因为属性保存在内存中,大属性会很快导致内存溢出问题。如果输出超过此值,将被截断以适应。如果可以的话,请考虑将此值设置得更小。 | |
| Output MIME Type | | 指定要为 \"mime.type\" 属性设置的值。如果设置了 'Output Destination Attribute',则忽略此属性。 |
动态属性
| 名称 | 值 | 描述 |
|---|---|---|
| 环境变量名称 | 环境变量的值 | 这些环境变量被传递给此处理器生成的进程 |
| command.argument.<commandIndex> | 要提供给命令的参数 | 使用命令参数策略时,这些参数被提供给此处理器生成的进程:动态属性参数。<commandIndex> 是一个数字,它将决定顺序。 |
关系 (Relationships)
| 名称 | 描述 | 自动终止 |
|---|---|---|
nonzero status | 当命令返回非零状态码时,从命令输出创建的 FlowFile 的目标路径。所有路由到此关系的 FlowFile 将被惩罚。 | 否 |
original | 原始 FlowFile 将被路由。 它将具有详细说明脚本执行结果的新属性。 | 否 |
output stream | 如果返回的状态代码为零,则为从命令的输出创建的 FlowFile 的目标路径。 | 否 |
写入的 FlowFile 属性
| 名称 | 描述 |
|---|---|
execution.command | 执行的命令的名称 |
execution.command.args | 以分号分隔的参数列表。 敏感属性将被屏蔽 |
execution.status | 执行命令返回的退出状态码 |
execution.error | 执行命令返回的任何错误消息 |
mime.type | 如果设置了“输出 MIME 类型”属性且未设置“输出目标属性”,则设置输出的 MIME 类型 |
状态管理
该组件不存储状态。
受限 (Restricted)
该组件不受限。
输入要求
该组件要求有传入连接。
详细说明
ExecuteStreamCommand
说明
ExecuteStreamCommand Processor 提供了一种灵活的方式,把外部命令和脚本集成到 Lynxus 数据流中。 ExecuteStreamCommand 可以像管道(pipe)一样,把传入 FlowFile 的内容传递给它所执行的命令。
配置选项
Working Directory(工作目录)
不指定时,默认工作目录为 Lynxus 根目录。
配置命令参数
ExecuteStreamCommand Processor 提供两种指定命令参数的方式:使用动态属性(Dynamic Properties) 或使用 Command Arguments 字段。
Command Arguments 字段
这是默认方式。如果有多个参数,需要用 Argument Delimiter 字段中指定的字符分隔。需要时可以传入 '-' 和 '--',但此时 Argument Delimiter 应当使用其他字符。
假设我们要列出一个与工作目录不同的目录下的所有文件:
| Command Path | Command Arguments |
|---|---|
| ls | -lah;/path/to/dir |
注意: 命令应当在 $PATH 中,或者位于工作目录中,否则还需要指定路径。
动态属性(Dynamic Properties)
参数也可以通过动态属性指定。符合 'command.argument.
上面的例子用动态属性表示如下:
| 属性名 | 属性值 |
|---|---|
| command.argument.0 | -lah |
| command.argument.1 | /path/to/dir |
配置环境变量
除了使用 Command Arguments 字段或动态属性指定命令参数外,用户还可以在 ExecuteStreamCommand
Processor 中使用环境变量。环境变量是系统中运行的进程可以访问的一组键值对。
ExecuteStreamCommand 会把所有不匹配 'command.argument.
假设我们要用该 Processor 执行一个 Maven 命令。如果系统中安装了多个 Java 版本,可以通过设置
JAVA_HOME 环境变量来指定使用哪个版本。如果用 --version 参数运行 mvn 命令,输出的
FlowFile 内容如下:
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /path/to/maven/home Java version: 11.0.18, vendor: Eclipse Adoptium, runtime: /path/to/default/java/home
Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "13.1", arch: "x86_64", family: "mac"
| 属性名 | 属性值 |
|---|---|
| JAVA_HOME | path/to/another/java/home |
指定 JAVA_HOME 属性之后,可以发现 Maven 使用了不同的运行时:
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /path/to/maven/home Java version: 11.0.18, vendor: Eclipse Adoptium, runtime: /path/to/another/java/home
Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "13.1", arch: "x86_64", family: "mac"
以流式方式向命令输入
ExecuteStreamCommand 会像管道一样,把传入 FlowFile 的内容传递给它执行的命令。可以通过 Ignore STDIN 属性禁用此行为。上面的示例没有用到传入 FlowFile 的内容,因此那种情况下可以利用 该属性获得额外的性能提升。
要利用流式输入能力,假设我们想对 FlowFile 使用 grep:假设需要从 Apache HTTPD 日志中列出
所有 POST 请求:
127.0.0.1 - - [03/May/2023:13:54:26 +0000] "GET /example-page HTTP/1.1" 200 4825 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"
127.0.0.1 - - [03/May/2023:14:05:32 +0000] "POST /submit-form HTTP/1.1" 302 0 "http://localhost/example-page" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"
127.0.0.1 - - [03/May/2023:14:10:48 +0000] "GET /image.jpg HTTP/1.1" 200 35785 "http://localhost/example-page" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"
127.0.0.1 - - [03/May/2023:14:20:15 +0000] "GET /example-page HTTP/1.1" 200 4825 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"
127.0.0.1 - - [03/May/2023:14:30:42 +0000] "GET /example-page HTTP/1.1" 200 4825 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"
Processor 配置:
| Working Directory | Command Path | Command Arguments Strategy | Command Arguments | Argument Delimiter | Ignore STDIN | Output Destination Attribute | Max Attribute Length |
|---|---|---|---|---|---|---|---|
| grep | Command Arguments Property | POST | ; | false | 256 |
这样,"output stream" Relationship 上输出的 FlowFile 应当是:
127.0.0.1 - - [03/May/2023:14:05:32 +0000] "POST /submit-form HTTP/1.1" 302 0 "http://localhost/example-page" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0"