web-dev-qa-db-ja.com

さまざまなディストリビューションでの初期化システムとサービス管理

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

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

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

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

4
michas

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

  • systemd --systemctl start xyz.service
    Fedora 15以降、RHEL7、Arch、Debian 8以降、Ubuntu 15以降、openSUSE 12.3以降

  • pstart --service xyz start
    Ubuntu、Fedora 9以降、RHEL6

  • SysV --/etc/init.d/xyz start
    RHEL5、Debian、Suse

  • OpenRC --/etc/init.d/xyz start
    Gentoo(Net/FreeBSDをサポート)

  • [〜#〜] smf [〜#〜] --svcadm enable svc:/prefix/xyz
    Solaris、Opensolarisベース(illumos、smartosなど)

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

  • 起動済み --launchctl start xyz
    OSX

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

systemdはLinuxが向かっているところです

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

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

A Chefrecipe 管理できます service resource

service "xyz" do
  action :start
end

パペットservice

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

Ansible serviceモジュール

- service: name=xyz state=started
5
Matt