「開始中... [ OK ]」を表示するのはどの部分ですか?

「開始中... [ OK ]」を表示するのはどの部分ですか?

次のようなサービスを開始すると:

root@foo [~]# service foobar stop
Stopping Foobar:                                       [  OK  ]

ステータス インジケーターが表示されます。[ OK ]これは、 に表示されるものとは異なります/var/log/boot.log

[  OK  ] Started LSB: disk temperature monitoring daemon.
...

あるいは、以下と異なる場合もあります:

* /proc is already mounted
* Caching service dependencies ...        [ ok ]

これら 3 つの例では、どのプロセスがデーモンの表示と起動を担当していますか? 言い換えると、どのライブラリが表示に使用されていますか[ OK ]?[FAILED]

答え1

service/etc/init.dまたは/etc/rc.dからSysVスタイルのスクリプトを手動で実行すると、すべてのステータス出力は完全にその脚本通りです。

適切に記述された init.d スクリプトは、ディストリビューションによって提供されるシェル関数のライブラリを使用します。たとえば、Debian では、ほとんどのスクリプトはファイルをロード (ソース) し/lib/lsb/init-functions、次のように提供されている関数を単純に呼び出します。

ケース「$1」
  始める)
    ログデーモンメッセージ「$DESC を開始」 「$NAME」
    始める
    ケース「$?」
        0|1)ログ終了メッセージ0 ;;
        2) log_end_msg 1 ;;
    エサック
    ;;
  [...]
エサック

これが標準関数のリストLSBによって定義されています。(ディストリビューションによっては、追加上記の例のように、標準を超える機能があります。また、OpenRCやArch LinuxなどのないLSB と互換性があり、まったく異なるスタイルを使用します。

実際、一部のディストリビューションではこの定型コードを一元的に提供しており、init.d スクリプトに残されているのは を実装することだけですdo_start(例として Gentoo の OpenRC と Debian を参照してください/lib/init/init-d-script)。ただし、これは「標準」の LSB 機能ではありません。LSB 互換にしようとするスクリプトでは、依然として手動で行う必要があります。


注記:「きちんと書かれている」ということを強調するのは、echoこれらの機能を使用するには、init.dスクリプトが必要です。スクリプトがプレーンテキスト(または経由で)でステータスを報告したい場合はcowsay、いつでもそれを行うことができます。これは、通常のチャネル外で配布される商用ソフトウェアで特に問題になります。ステータス出力一度もないかなり正しいように見えます (そして率直に言って、init.d スクリプト全体は決して正しく動作しません)。


一方、SysVスクリプトが呼び出されると、ブートプロセス結果はさらにディストリビューションに依存します。スクリプト自体から直接出力が表示される場合もありますが、「メイン」の init システムが起動するすべてのサービスに対して独自のステータス出力を提供する場合もあります。(例:Arch Linux の古い initscripts (バックグラウンドでサービスを開始する場合)

しかし、2番目の例は実際にはないSysVスタイルのinit – これはsystemdです(あなたの例では、たまたま「レガシー」のinit.dスクリプトを起動しているだけです)。Systemdは、サービス設定(スクリプトではない)を使用する完全なサービスマネージャであるため、全てブート/シャットダウン ステータスの出力は、systemd 自体によって提供されます。これは、init-ng、SMF、Upstart など、他のほとんどの「サービス マネージャー」にも適用されます。

答え2

これはディストリビューションに依存する init スクリプトから発生します。serviceプログラムの内容を確認してください。これはおそらく、基盤となる管理スクリプト (SysV は現在では廃止されていると見なされます) またはバイナリ (systemd が適しています) を呼び出すシェル スクリプトです。これは systemd の利点の 1 つであり、「状況によって異なります」という回答は得られません。

関連情報