有人知道如何使用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}}
答案 0 :(得分:0)
您似乎做得对,但请记住,当前工作目录在exec
的上下文中并不总是很明显。脚本的完整路径将更加健壮。请注意,这是由ruby的system()
函数运行的,如果您对潜在的副作用和约束感兴趣。
答案 1 :(得分:0)
根据Exec output plugin的Logstash参考:
使用
dtach
或screen
使其无阻止。
我建议您使用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不会尝试附加到新创建的会话,而是退出。
希望有所帮助!