Fedora17中systemd系统和服务管理器

来源:互联网 发布:金融网络投资排行 编辑:程序博客网 时间:2024/05/18 01:07

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

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

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

     systemctl是最主要的工具。它融合 servicechkconfig 的功能于一体。你可以使用它永久性或只在当前会话中启用/禁用服务。下面的表格列出了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)。     

          开机时系统会启动一系列服务,这些信息从启动过程中我们无法看到,这时就可以使用systemctl来获得开机信息:

systemd-journald.service  loaded active running       Journal Service
systemd-logind.service    loaded active running       Login Service
systemd-...ollect.service loaded active exited        Collect Read-Ahead Data
systemd-...replay.service loaded active exited        Replay Read-Ahead Data
systemd-...unt-fs.service loaded active exited        Remount Root and Kernel File Systems
systemd-sysctl.service    loaded active exited        Apply Kernel Variables
systemd-...-setup.service loaded active exited        Recreate Volatile Files and Directories
systemd-...ssions.service loaded active exited        Permit User Sessions
systemd-...-setup.service loaded active exited        Setup Virtual Console
tcsd.service              loaded failed failed        LSB: Init script for TCSD
udev-settle.service       loaded active exited        udev Wait for Complete Device Initialization
udev-trigger.service      loaded active exited        udev Coldplug all Devices
udev.service              loaded active running       udev Kernel Device Manager
udisks2.service           loaded active running       Storage Daemon
upower.service            loaded active running       Daemon for power management
wpa_supplicant.service    loaded active running       WPA Supplicant daemon
xinetd.service            loaded active running       Xinetd A Powerful Replacement For Inetd
avahi-daemon.socket       loaded active listening     Avahi mDNS/DNS-SD Stack Activation Socket
cups.socket               loaded active running       CUPS Printing Service Sockets
dbus.socket               loaded active running       D-Bus System Message Bus Socket
这里只列出部分信息,状态为active表明处于活动状态,可以可到tcsd.service显示的fail,这是我们可以使用systemctl status tcsd.service来获得出错信息

tcsd.service - LSB: Init script for TCSD
      Loaded: loaded (/etc/rc.d/init.d/tcsd)
      Active: failed (Result: exit-code) since Tue, 25 Feb 2014 08:32:29 +0800; 27min ago
     Process: 633 ExecStart=/etc/rc.d/init.d/tcsd start (code=exited, status=4/NOPERMISSION)
      CGroup: name=systemd:/system/tcsd.service


0 0