2017-07-16 4 views
0

Est-ce que quelqu'un sait comment exécuter la commande en arrière-plan à l'aide du plugin de sortie exec de logstash? J'ai essayé cette configurationExécution de la commande en arrière-plan à l'aide du plugin de sortie exec de logstash

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

et le contenu du script est

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

contient file.txt Donc finalement & comme il est le paramètre: fff ggg hhh jjj kkk &

Répondre

0

Vous semblez être le faire droit, mais garder à l'esprit que le répertoire de travail en cours n'est pas toujours évident dans le contexte de exec. Un chemin complet vers le script serait beaucoup plus robuste. Sachez que c'est géré par la fonction system() de ruby ​​si vous êtes intéressé par les effets secondaires et les contraintes possibles.

0

Selon le Logstash Référence pour Exec output plugin:

Utilisez dtach ou screen pour le rendre non bloquant.

Je vous suggère d'utiliser dtach, extrait de la page d » mandtach:

dtach est destiné aux utilisateurs qui veulent la fonction Détacher de l'écran sans l'autre tête de l'écran. Il est minuscule, n'utilise pas beaucoup de bibliothèques et reste le plus possible à l'écart.

Exemple d'utilisation (comme sysadmin1138 suggéré, vous devez utiliser le chemin complet):

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

Note 1: Vous devez probablement installer dtach d'abord si votre système ne dispose pas par défaut.

Remarque 2: Vous pouvez obtenir le chemin complet de dtach en utilisant la commande which dtach.

Note 3: Définition de -n le mode de page de manuel de dtach:

-n Crée une nouvelle session, sans y attacher. Une nouvelle session est créée dans laquelle le programme spécifié est exécuté. Cependant, dtach n'essaie pas de se connecter à la session nouvellement créée et quitte à la place.

Espérons que ça aide!