lsb - シェルコンソールにlog_daemon_msgエコーメッセージが表示されます!

lsb - シェルコンソールにlog_daemon_msgエコーメッセージが表示されます!
#!/bin/sh
. /lib/lsb/init-functions
log_daemon_msg "this is a daemon s message"

シェルコンソールでは、次のように印刷されます。

this is a daemon s message

デーモンには標準出力はまったくありません。それでは、daemon startupスクリプトはなぜ書かれたのですかstdout?ファイルを使用しないでくださいsyslog。起動時間の問題をデバッグするために初期化ログをシステムログファイルにリダイレクトするにはどうすればよいですか? Ubuntu 14.04を使用しています。

答え1

デーモンには標準出力はまったくありません。

間違っています。デーモンがdaemontoolsツールセットスイートの1つによって管理されている場合(https://unix.stackexchange.com/a/179798/5132)、デーモンはロギングサービスに接続するパイプのオープン標準出力ファイル記述子を継承します。 systemd を使用する場合(デフォルト設定では)デーモンは、systemd ロギングサービスのソケットに接続するオープン標準出力ファイル記述子を継承します。

それにもかかわらず、init.dスクリプトを難読化しています。管理するデーモンプロセスとデーモンプロセス自体。 System Vrcおよび systemd の場合、init.dスクリプトはデーモンプロセス自体の開始と中断のみが発生します。 (System Vの場合rcと同じヘルパーを使用してこれを実行しますstart-stop-daemon。systemdの場合はsystemctl#1を処理するためにD-Bus RPCを介してコマンドを送信するために使用されます。)デーモン自体ではありません。

デーモンの標準出力は、init.dスクリプトの標準出力と必ずしも関連があるわけではありません。後者の標準出力を使用していますlog_daemon_msg。このシェル関数と関連関数は、おなじみのメッセージを出力します。デーモン管理スクリプトからは、デーモン制御コマンドを実行しようとしたときに管理スクリプトが実行する操作を示しています。彼らは使用されませんデーモン自体から

皮肉なことに、デーモンはsystemdとは異なる方法で管理されるため、log_daemon_msgソース管理スクリプトは/lib/lsb/init-functions最終的にすべての制御コマンドをsystemctl

起動時間の問題をデバッグするために初期化ログをシステムログファイルにリダイレクトするにはどうすればよいですか?

あなたにはミッションがあります。このタスクのサブタスクが何らかの方法で解決できると判断し、ここで意図しないタスクをlog_daemon_msg実行する方法を尋ねます。log_daemon_msgあなたの集中本物質問。

Ubuntu 14.04はupstartを使用します。実行レベルのイベントが発生したときに、実際にSystem Vを実行して/etc/init/rc.confSystem Vとの下位互換性を提供する起動操作があります。この仕事はrcrcに記載ヌボリッチレシピ用途はご覧のようにconsole outputスタンザ

ご覧のとおりレシピおよびupstart - デーモン(デフォルト)は、upstartのジョブ固有のロギングメカニズムに接続されたオープン標準出力ファイル記述子を継承します。もう一度言いますが、デーモンには「標準出力がない」という概念は間違っています。この/etc/init/rc.confアクションは、(デフォルトではない)オプションを使用して標準出力をコンソールに接続します.もちろん、これはSystem rcVで生成されたさまざまなデーモン管理スクリプトの出力もリダイレクトします。

したがって、ジョブ出力とそのジョブが生成する System V 管理スクリプトを別の場所に記録するには、ジョブ/etc/init/rc.conf仕様を変更します。

起動時間の問題をデバッグするには、次のメカニズムを使用します。で説明されているヌボリッチレシピ(そしてAskUbuntu Stack Exchangeへのいくつかの答え)起動時にデバッグするためのものです。

追加読書

関連情報