#!/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.conf
System Vとの下位互換性を提供する起動操作があります。この仕事はrc
rc
に記載ヌボリッチレシピ用途はご覧のようにconsole output
スタンザ。
ご覧のとおりレシピおよびupstart - デーモン(デフォルト)は、upstartのジョブ固有のロギングメカニズムに接続されたオープン標準出力ファイル記述子を継承します。もう一度言いますが、デーモンには「標準出力がない」という概念は間違っています。この/etc/init/rc.conf
アクションは、(デフォルトではない)オプションを使用して標準出力をコンソールに接続します.もちろん、これはSystem rc
Vで生成されたさまざまなデーモン管理スクリプトの出力もリダイレクトします。
したがって、ジョブ出力とそのジョブが生成する System V 管理スクリプトを別の場所に記録するには、ジョブ/etc/init/rc.conf
仕様を変更します。
起動時間の問題をデバッグするには、次のメカニズムを使用します。で説明されているヌボリッチレシピ(そしてAskUbuntu Stack Exchangeへのいくつかの答え)起動時にデバッグするためのものです。
追加読書
- ランレベル。 Ubuntu 14.04のマニュアルページ。モデル。
- 始めるUbuntu 14.04のマニュアルページ。モデル。
- https://askubuntu.com/questions/36200/
- https://askubuntu.com/questions/116407/
- https://superuser.com/questions/403847/