使用logstash exec输出插件在后台运行命令

时间:2017-07-16 08:40:00

标签: output logstash exec elastic-stack

有人知道如何使用logstash exec输出插件在后台运行命令吗? 我尝试了这个配置

input {
  file {
    path => "file.log"    
  }
}
output {
  exec {
    command => "./script.sh fff ggg hhh jjj kkk &"
  }
}

脚本内容是

#/bin/bash
echo "$*" >> file.txt

所以最后file.txt包含&,因为它是参数:{{ 1}}

2 个答案:

答案 0 :(得分:0)

您似乎做得对,但请记住,当前工作目录在exec的上下文中并不总是很明显。脚本的完整路径将更加健壮。请注意,这是由ruby的system()函数运行的,如果您对潜在的副作用和约束感兴趣。

答案 1 :(得分:0)

根据Exec output plugin的Logstash参考:

  

使用dtachscreen使其无阻止。

我建议您使用dtach,摘自dtach man页:

  

dtach适用于需要屏幕分离功能且没有其他屏幕开销的用户。它很小,不使用很多库,并尽可能地避开。

示例用法(如sysadmin1138建议,您应该使用完整路径):

output {
  exec {
    command => "/usr/bin/dtach -n /tmp/session_name -Ez /absolute/path/script.sh fff ggg hhh jjj kkk"
  }
}

注1:如果您的系统默认没有dtach,则可能需要先安装dtach。

注2:您可以使用which dtach命令获取完整的dtach路径。

注3: -n手册页中dtach模式的定义:

  

-n创建一个新会话,而不附加到它。创建一个新会话,在该会话中执行指定的程序。但是,dtach不会尝试附加到新创建的会话,而是退出。

希望有所帮助!