いくつかのデーモンに Upstart スクリプトと init.d スクリプトの両方があるのはなぜですか?

いくつかのデーモンに Upstart スクリプトと init.d スクリプトの両方があるのはなぜですか?

私は Ubuntu 12.04.3 LTS を実行しており、Samba、DHCP サーバーなどのいくつかのサービスをインストールしています。

「halt now」、「telinit 6」などを実行すると、次の警告が表示されます。

Since the script you are attempting to invoke has been converted
to an Upstart job, you may also use the...

影響を受けるサービスが 2 回停止/開始を試行していることがわかります。1 回は Upstart ジョブを通じて、もう 1 回は init.d スクリプトをターゲットとする /etc/rcN.d フォルダー内の S/K シンボリック リンクを通じてです。おそらく、/etc/rcN.d フォルダー内のシンボリック リンクを削除するだけで済むでしょう。

フローの例:

  1. シェルから「halt now」を実行する
  2. Upstart は Samba を停止します (Samba 用の Upstart conf ファイルがあるため)
  3. SysV は再び Samba を停止しようとします (/etc/rc0.d/K20smbd シンボリックリンクもあるため)

ステップ 3 は不要で、醜い警告が表示されるため、理解できません/必要ありません。

なぜ、複数のデーモンに Upstart スクリプトと init.d スクリプトへのシンボリック リンクの両方が存在するのでしょうか? 各 /etc/rcN.d フォルダー内の重複したシンボリック リンクを手動でクリーンアップするのが正しい方法でしょうか?

答え1

Ubuntu には互換性initリンクがあり、実行するたびに対応する Upstart が呼び出されます。

たとえば、を呼び出すと、sudo /etc/init.d/apache start使用すべき便利な情報メッセージを表示する upstart-job にリンクされsudo services apache start、その後、コマンドが自動的に実行されます。

ls -l /etc/init.d/network-manager 
lrwxrwxrwx 1 root root 21 Sep 18 14:02 /etc/init.d/network-manager -> /lib/init/upstart-job

cat /lib/init/upstart-job
#!/bin/sh -e
# upstart-job
#
# Symlink target for initscripts that have been converted to Upstart.
{ lots of ASCII awesomeness }

答え2

これは私の Puppet スクリプトの設定ミスだと分かりました。

「サービス」タイプの属性「enable」は、Upstart スクリプトを認識する代わりに、SysV init スクリプトを作成しました。

関連情報