異なるディストリビューション上の init システムとサービス管理

異なるディストリビューション上の init システムとサービス管理

どの Linux ディストリビューションにどの (デフォルトの) init システムが付属し、サービスを開始/停止するためにどのツールを使用するかについての概要はありますか?

サービスを開始/停止/照会するためのディストリビューションに依存しない方法はありますか?

  • /etc/init.d/xyz startsystem-v initシステムでのみ動作します
  • service xyz startすべてのディストリビューションで利用できるわけではありません (どのディストリビューションにこの機能がありますか?)
  • 利用可能なコマンドに応じて大文字と小文字を切り替えるのが唯一の信頼できる方法のようです

背景: サービスを再起動/照会する必要があるさまざまな Linux ディストリビューション用のインストーラーを作成する必要があります。serviceそのためにはツールを呼び出すのが便利ですが、どのディストリビューションがこれをサポートしているかはわかりません。

答え1

このサービスをインストールする場合は、サポートするプラットフォームに合わせて init スクリプト/構成を正しく記述する必要があるため、各ディストリビューションのサービス管理について知っておく必要があるでしょう。

  • システム- systemctl start xyz.service
    Fedora 15+、RHEL7、Arch、Debian 8+、Ubuntu 15+、openSUSE 12.3+

  • アップスタート- service xyz start
    Ubuntu、Fedora 9+、RHEL6

  • システムV- /etc/init.d/xyz start
    RHEL5、Debian、Suse

  • オープンRC- /etc/init.d/xyz start
    Gentoo、Alpine(Net/FreeBSDをサポート)

  • SMF の- svcadm enable svc:/prefix/xyz
    Solaris、OpenSolaris ベース (illumos、smartos など)

  • rc - /etc/rc.d/xyz start
    BSD

  • 起動- launchctl start xyz
    OSX

システムVは Linux 標準 ( /etc/rc.d/xyz) であり、ほとんどの新しい init システムはそこからのスクリプトを引き続きサポートしているので、これが基本ポイントになります。

システムLinuxが向かう先は

多くのプラットフォームで実行できるユーティリティについては知りませんが、ほとんどの構成管理ソフトウェアはクロスプラットフォームのサービス管理を行うことができます。残念ながら、これは構成管理ソフトウェアもインストールする必要があることを意味します (または少なくとも基礎となるモジュールとランタイム ruby​​/python)。自分のマシンでインストールを管理する場合は、構成ツールからインストールするすべての操作を実行できるため、これは問題ありません。ソフトウェアを誰かに配布しようとしている場合は、あまり適していません。

次の構成管理の例では、ローカルのデフォルトのサービス マネージャーと対話し、xyzまだ実行されていない場合は起動します。これ以上のことは意識する必要はありません。

シェフ レシピ管理できるserviceリソース

service "xyz" do
  action :start
end

傀儡service

service { "xyz":
  ensure => "running",
}

Ansibleserviceモジュール

- service: name=xyz state=started

関連情報