2017-07-16 374 views
0

有谁知道如何使用logstash exec输出插件在后台运行命令? 我想这个配置使用logstash exec输出插件在后台运行命令

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

和文字内容是

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

所以最后file.txt的包含&,因为它是参数:fff ggg hhh jjj kkk &

回答

0

你似乎做的是正确的,但是请记住在exec的范围内,当前工作目录并不总是显而易见的。脚本的完整路径将更加健壮。请注意,如果您对潜在的副作用和限制感兴趣,可以使用ruby的system()函数运行。

0

按照Logstash参考的Exec output plugin

使用dtachscreen使它非阻塞。

我建议你使用dtach,从dtachman网页摘录:

dtach适用于谁想要屏幕没有画面的其他开销分离功能的用户。它很小,不会使用许多图书馆,并尽可能保持不变。

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

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

注1:您可能需要安装dtach第一,如果你的系统默认不拥有它。

注2:您可以通过使用which dtach命令得到dtach的完整路径。

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

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

希望有所帮助!