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

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

文書によると、次のプログラムを実行できます。

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

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

答え1

私が正しく理解し、これが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

答え2

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

これはとても簡単です...

#!/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

関連情報