2017-07-16 10 views
0

Weiß jemand, wie man Befehl im Hintergrund mit Logstash Exec Output Plugin ausführen? Ich habe versucht, diese KonfigurationRunning Befehl im Hintergrund mit logstash exec Ausgabe-Plugin

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

Und Skript Inhalt ist

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

So endlich datei.txt enthält & wie es Parameter ist: fff ggg hhh jjj kkk &

Antwort

0

Sie scheinen es richtig zu machen, obwohl halten Beachten Sie, dass das aktuelle Arbeitsverzeichnis im Kontext von exec nicht immer offensichtlich ist. Ein vollständiger Pfad zum Skript wäre viel robuster. Beachten Sie, dass dies von rubys system() Funktion ausgeführt wird, wenn Sie an möglichen Nebenwirkungen und Einschränkungen interessiert sind.

0

Nach der Logstash Referenz für Exec output plugin:

Verwenden dtach oder screen es nicht blockierende zu machen.

Ich schlage vor, Sie verwenden dtach, Auszug aus dtach ‚s man Seite:

dtach ist für Anwender gedacht, die die detach Funktion des Bildschirms ohne das andere Overhead-Bildschirm soll. Es ist winzig, verwendet nicht viele Bibliotheken und bleibt so weit wie möglich aus dem Weg.

Beispiel zur Nutzung (wie sysadmin1138 vorgeschlagen, sollten Sie den vollständigen Pfad verwenden):

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

Anmerkung 1: Sie müssen wahrscheinlich nicht dtach zuerst, ob Ihr System installieren, das nicht standardmäßig durch haben.

Hinweis 2: Sie können den vollständigen Pfad von dtach mit dem Befehl which dtach abrufen.

Anmerkung 3: Definition von -n Modus von dtach ‚s Manpage:

-n Erzeugt eine neue Sitzung, ohne darauf zu befestigen. Eine neue Sitzung wird erstellt, in der das angegebene Programm ausgeführt wird. dtach versucht jedoch nicht, an die neu erstellte Sitzung anzuhängen und wird stattdessen beendet.

Hoffe, dass hilft!