web-dev-qa-db-ja.com

ログの出力をsyslog-ngのオプションの引数としてコマンドに送信できますか?

ドキュメントによると、私は次のようなプログラムを実行できます。

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

そして、実行可能ファイルのstdinにログを送信します。しかし、実行しているプログラムがオプションへの引数として入力を必要とする場合はどうなりますか?それを行う方法はありますか?または、実行しているプログラムのラッパーを作成する必要がありますか?

3
xenoterracide

Syslog-ngはコマンドの起動時にのみコマンドを実行するため、ほとんどのコマンドではラッパーを作成する必要があります。これは、コマンドが事実上、stdinからの入力を常に受け​​入れるデーモン自体である必要があることを意味します。

それは簡単ですが...

#!/bin/dash

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

残念ながら、このスクリプトは私には機能しません。おそらく、使用するディスプレイがわからないためです。ただし、スクリプトにXサーバーが必要ない場合は、このような単純な形式で機能するはずです。

Syslog-ngは起動時にのみプログラムを起動するため、これはあまり役に立ちませんが、xargsが標準入力から位置引数を作成できるという事実は興味深いと思いました。

echo 'test' | /usr/bin/xargs -I '{}' /usr/bin/kdialog --passivepopup '{}' 2
0
xenoterracide

私があなたを正しく理解していて、これがLinux上にある場合は、

/proc/self/fd/0

引数として。これは、プロセスの標準入力へのシンボリックリンクである必要があります。同様に、一部のシステムでは、

/dev/stdin

これは多くの場合、/proc/self/fd/0への単なるシンボリックリンクです。これをテストするためのsyslog-ngを備えたシステムはありませんが、次のようなものが機能するはずです。

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

ここで、-iは、実行可能ファイルが必要な場合は、コマンドラインスイッチの代わりに使用されます。/dev/fd/0も使用されていますが、/ procを直接使用する傾向があります。詳細については、man procを参照してください。

0
Steven D