Posso enviar a saída de um log para um comando como um argumento para uma opção no syslog-ng?

3

De acordo com a documentação, posso executar um programa assim:

destination knotifier { program('/path/to/executable'; };

E ele enviará o log para o stdin do executável. Mas e se o programa que estou executando precisar da entrada como um argumento para uma opção? Existe uma maneira de fazer isso? Ou eu tenho que escrever um wrapper para o programa que estou executando?

    
por xenoterracide 02.09.2010 / 19:00

2 respostas

0

Para a maioria dos comandos, um wrapper terá que ser escrito, pois o Syslog-ng só executará o comando quando for iniciado. Isso significa que o comando deve ser efetivamente um daemon sempre aceitando a entrada de stdin.

Isso é simples embora ...

#!/bin/dash

while read line
do
    /execute/my/app $line
done

infelizmente este script não funciona para mim, provavelmente porque não sabe qual display usar. Mas se o seu script não precisar de um servidor X, um formato simples como esse deve funcionar para você.

Embora isto não seja de nenhuma maneira útil devido ao fato de que o Syslog-ng iniciará apenas o programa na inicialização, eu achei o fato de que xargs pode criar argumentos posicionais a partir da entrada padrão interessante.

echo 'test' | /usr/bin/xargs -I '{}' /usr/bin/kdialog --passivepopup '{}' 2
    
por 04.09.2010 / 22:52
0

Se eu entendi corretamente e se isso está no Linux, você pode tentar usar

/proc/self/fd/0

como o argumento. Este deve ser um link simbólico para a entrada padrão do processo. Equivalentemente, em alguns sistemas, você poderia usar

/dev/stdin

que geralmente é apenas um link simbólico para /proc/self/fd/0 . Eu não tenho um sistema com syslog-ng para testar isso, mas acho que algo como o seguinte deve funcionar:

destination knotifier { program('/path/to/executable -i /proc/self/fd/0'); };

onde -i seria substituído por qualquer opção de linha de comando que o executável precisa, se houver. Eu também vi / dev / fd / 0 usado, mas eu costumo ficar usando / proc diretamente. Para mais informações, consulte man proc .

    
por 04.09.2010 / 08:04