exec

Execute arbitrary commands

Things to note:

  • By default, input data streams through the output process, i.e. works like a shell filter. You cannot have ${field} expansions of the command when streaming, so streaming is switched off. Then the command will be executed once for each input line. With input-field you have to explicitly ask for streaming: true for reasons of backward compatibility.
  • With batched output you will have access to the fields of the first event in the batch








| Field Name | Description | Type | Default |
|------|----|---|---|
|[input-field](#input-field)| A field from where data is to be read, meaning JSON is assumed | field | - |
|[command](#command)| A shell command to be executed | string | - |
|[streaming](#streaming)| Run the command separately for each event | bool | true |
|[retry](#retry)| For operations that could potentially fail | - | - |
|[batch-out](#batch-out)| Some outputs support batching the output events, by maximum size, timeout, or end of document | - | - |












####   input-field


A field from where data is to be read, meaning JSON is assumed


Otherwise the whole event is sent



**Type:** field




**Example**




_input_:
```json
{"text":"one","number":1}

action:

exec:
  input-field: text
  command: cat

output:

one

command

A shell command to be executed

If streaming is set to false (or input-field by default) then there can be field expansions

Type: string

Example

input:

{"text":"one","number":1}

action:

exec:
  command: cat

output:

{"text":"one","number":1}

streaming

Run the command separately for each event

Normally, the command runs continuously and events are passed through

Type: bool

Example: streaming must be explicit if input-field is defined

input:

{"msg":"hello dolly"}
{"msg":"we are happy"}

action:

exec:
  input-field: msg
  streaming: true
  command: tr 'h' 'H'

output:

Hello dolly
we are Happy

Example: streaming is implicit if there are field expansions

input:

{"text":"one","number":1}

action:

exec:
  command: echo "${text}-${number}"

output:

one-1

retry

For operations that could potentially fail

Field NameDescriptionTypeDefault
countHow many attempts to make before declaring failureinteger-
pauseHow long to pause before re-tryingduration-
foreverkeep trying until success is declaredboolfalse

count

How many attempts to make before declaring failure

Type: integer

Example

action:

exec:
  command: echo 'one two'
  retry:
    count: 1

output:

{"_raw":"one two"}

pause

How long to pause before re-trying

Accepts human-friendly formats, like 1m (for 1 minute) and 4h (for 4 hours)

Type: duration

Example

action:

exec:
  command: echo 'one two'
  retry:
    count: 6
    pause: 10s

output:

{"_raw":"one two"}

forever

keep trying until success is declared

Accepts human-friendly formats, like 1m (for 1 minute) and 4h (for 4 hours)

Type: bool

Example

action:

exec:
  command: echo 'one two'
  retry:
    forever: true

output:

{"_raw":"one two"}

batch-out

Some outputs support batching the output events, by maximum size, timeout, or end of document

v2.8

Field NameDescriptionTypeDefault
batchmaximum number of events in an output batch. If 'document' send on end of document--
timeoutinterval after which the batch is sent, to keep throughput going-100ms
headerput a header line before the batch--
footerput a header line after the last line of the batch--

batch

maximum number of events in an output batch. If 'document' send on end of document

timeout

interval after which the batch is sent, to keep throughput going

put a header line before the batch

put a header line after the last line of the batch