初期化、syslog、標準出力/標準エラー

初期化、syslog、標準出力/標準エラー

私はLinuxで組み込みシステムを構築しようとしています。 (ビジボックス以外にはほとんどリソースがないという意味です。)すべてがsyslogに書き込まれていることを確認したいと思います。私はinitとsyslogdが組み込まれた最新バージョンのbusybox(v.1.21.1)を使用しています。

しかし、まだいくつかの問題があります。最初は初期化タブです。

....
null::sysinit:/bin/sh /etc/rc
null::sysinit:/bin/touch /var/log/messages
null::respawn:/sbin/syslogd -n -S -s 12 -b 8
null::respawn:/sbin/klogd -n
....

rcスクリプトはsyslogの前に実行されます。これは、rcのすべての有用な情報が失われることを意味します。 (しかし、touchコマンドが何であるかわかりません。)rc(null :: sysinit:/ sbin / syslogd ...)の前にsyslogを起動できますが、これは非常に重要な「再生」を削除します。

また、サードパーティのデーモンが起動すると、次のようになります。

...
null::respawn:/bin/modbus
...

デーモンがsyslogをサポートしていない場合、またはいくつかのエラー(stderrで印刷など)が発生した場合、この情報は失われます。出力をsyslogにリダイレクトできないようです。例えば。

...
console::respawn:/bin/modbus|logger 2>1
...

私は様々な組み合わせを試しました。何もうまくいかないようです。もちろん、すべてのデーモンを編集してsyslogをサポートするようにすることもできます。 (しかし、何かが滑ったらどうでしょうか?)

log::respawn:/bin/modbus

実際には/dev/logがあります。しかし、ソケットなので、一般的なリダイレクトは機能しません。 ...これにより、カスタムカーネルモジュールを介して機能させることができます。例えば。 /dev/syslog_linkを生成し、すべてをprintkに書き込むモジュールを作成できます。問題は、syslogがそのログのすべてのメッセージを「カーネル」としてマークすることです。とても間違っていました。

これで、/dev/logに書き込むカーネルモジュールを作成できると思いました。 https://stackoverflow.com/questions/1184274/how-to-read-write-files-within-a-linux-kernel-module https://www.cs.drexel.edu/~jjohnson/2012-13/fall/cs543/project/reading/kernel_fileio.pdf

これが可能かどうかわかりません。カーネル空間にファイルを書くと、正しいことを確認するための弱い感覚が損なわれます。

どんなアイデアがありますか?

ベストアンサー1

rcスクリプトはsyslogの前に実行されます。

/var/logたとえば、これはrwを含むファイルシステムが再マウントされる場所です。そうでない場合は、まずsyslogを起動できます。

私は様々な組み合わせを試しました。何もうまくいかないようです。

私は数年間inittabをあまり使用していません。たとえば/bin/modbus|logger 2>1、短いスクリプトに入れて代わりに試してみましたかrespawn

もちろん、すべてのデーモンを編集してsyslogをサポートするようにすることもできます。

可能であれば、おそらくそうする必要があります。あるいは、ファイルに直接書き込むこともできます。

/dev/logがあります。しかし、ソケットなので、一般的なリダイレクトは機能しません。 ...これにより、カスタムカーネルモジュールを介して機能させることができます。

これは遠すぎるようです。ユーザー空間デーモンを使用して最初に起動する方が簡単です。 FIFOで何でも読み書きできます。もちろん、すでにsyslog:/ fifoがあることを考慮すると、少し重複する可能性があります。リーダーが使用するヒントは、read()ゼロが返されたときにパイプを再び開くことです。しかし、もう一度申し上げますが、私はsyslogを最初に動作させようとします。標準を維持する方が簡単です。

おすすめ記事