Fedora 17中systemd系统和服务管理器


systemd 是 Linux 下一个与 SysV 初始化脚本兼容的系统和服务管理器,使用 socket 和 D-Bus 来开启服务,提供基于守护进程的按需启动策略,可以用来管理启动的服务、调整运行级别、管理日志等等。

为了加速整个系统启动和并行启动更多的进程,systemd 在实际启动守护进程之前创建监听 socket ,然后传递 socket 给守护进程。在系统初始化时,首先为所有守护进程创建 socket ,然后再启动所有的守护进程。如果一个服务因为需要另一个服务的支持而没有完全启动,而这个连接可能正在提供服务的队列中排队,那么这个客户端进程在这次请求中就处于阻塞状态。不过只会有这一个客户端进程会被阻塞,而且仅是在这一次请求中被阻塞。服务间的依赖关系也不再需要通过配置来实现真正的并行启动(因为一次开启了所有的 socket ,如果一个服务需要其他的服务,它显然可以连接到相应的 socket)。

D-Bus 激活策略启动服务:通过使用总线激活策略,服务可以在接入时马上启动。同时,总线激活策略使得系统可以用微小的消耗实现 D-Bus 服务的提供者与消费者的同步开启请求。(同时开启多个服务,如果一个比总线激活策略中其他服务快就在 D-Bus 中排队其请求,直到其他管理确定自己的服务信息为止)。

systemctl是最主要的工具。它融合 service 和 chkconfig 的功能于一体。你可以使用它永久性或只在当前会话中启用/禁用服务。下面的表格列出了systemd相关命令,及其相应于的sysVinit下的等价命令。

/sbin/service 和 /sbin/chkconfig 在 systemd 环境下依然可以工作,并且在必要的情况下将会被翻译成原生的等效命令。

Systemd 引入一个概念:目标。它的用途和运行级别类似,但是运行起来有一些不同。每一个目标使用名称而不是数字命名的,服务于一个特定的目的。一些目标通过继承另一个 目标然后添加其他额外服务来实现。也有一些 systemd 目标 模仿通常的 sysvinit 运行级别,于是您依然可以通过熟悉的telinit RUNLEVEL 来切换 目标。在纯净 Fedora 系统上运行级别 0, 1, 3, 5, 和 6; 与特定的 目标 之间存在 1:1 的映射关系。遗憾的是,对于用户自定义运行级别 2 和 4 没法实现类似的转换。如果您使用了这些运行级别,建议您用/etc/systemd/system/$YOURTARGET 的方式创建一个新的 systemd 目标,并以一个已有的运行级别作为基础 (您可以查看/lib/systemd/system/graphical.target 作为例子),创建一个目录/etc/systemd/system/$YOURTARGET.wants,然后符号链接您想要启用的额外服务到该目录下 (符号链接的服务位于/lib/systemd/system)。

相关内容