不同发行版上的初始化系统和服务管理

mic*_*has 4 distros linux services

是否有一些 Linux 发行版附带哪个(默认)init 系统并使用哪个工具来启动/停止服务的概述?

是否有一些独立于发行版的方式来启动/停止/查询服务?

  • /etc/init.d/xyz start 仅适用于 system-v init 系统
  • service xyz start 并非在每个发行版上都可用(哪个发行版(没有)有这个?)
  • 根据可用命令切换大小写似乎是唯一可靠的方法

背景:我们需要为需要重新启动/查询服务的不同 Linux 发行版编写安装程序。service为此调用该工具会很酷,但我不确定哪些发行版支持这一点。

Mat*_*att 5

如果您正在安装此服务,那么您可能需要了解每个发行版服务管理,因为您应该为要支持的平台正确编写 init 脚本/配置。

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

  • 新贵- 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在它尚未运行时启动。你不需要知道更多。

一个厨师 配方可以管理service资源

service "xyz" do
  action :start
end
Run Code Online (Sandbox Code Playgroud)

木偶 service

service { "xyz":
  ensure => "running",
}
Run Code Online (Sandbox Code Playgroud)

Ansibleservice模块

- service: name=xyz state=started
Run Code Online (Sandbox Code Playgroud)