首页 > 代码库 > systemd

systemd

  systemd是Linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。

   systemd 被用作 Arch Linux 的 init。学习 systemd 的基本使用对维护 Arch Linux 大有帮助。通过 systemctl 命令可以和 systemd 进行交互。具体请参考 systemd#Basic systemctl usage。

  与多数发行版使用的System V风格init相比,systemd采用了以下新技术:

  •  采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;
  • 用cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。        

  从设计构思上说,由于systemd使用了cgroup与fanotify等组件以实现其特性,所以只适用于Linux。有鉴于此,考虑到kFreeBSD分支的软件源无法纳入systemd,为与其他分支保持一致,Debian开发者尽力避免纳入systemd。但Lennart Poettering本人对此并不在意,并称”Debian kFreeBSD不过是玩具系统“。

  systemd用来管理系统的主要命令是 sytemctl systemadm 是 sytemctl 官方的前端UI工具。systemd的功能主要是:

  1、列出运行的单元(list running Unit)

  $ systemctl 

  或者

  $ systemctl list-units

  列出运行失败的单元

  $ systemctl --failed

  可以从/usr/lib/systemd/system/ 和  /etc/systemd/system/ 获得当前的单元(后者优先)。你可以用下面的命令查看安装的单元:

  $ systemctl list-unit-files

  2、使用单元(using Unit)

  单元可以是例如:服务(.service)、挂载点(.mount)、设备(.device)或者套接字(.socket)。

  当使用Unit的时候,必须Unit file的全名,包括后缀。例如:sshd.socket。有下面的几种特殊的指定形式。

  • 如果你没有指定后缀,systemctl会默认为是服务(.service)。例如,指定 netcfg和netcft.service是等效的
  • 挂载点会被自动转换为合适的.mount Unit。例如,指定/home和home.mount是等效的。
  • 和挂载点类似,设备单元(device Unit)会自动转换为合适的.device Unit。因此,指定/dev/sda2和dev-sda2.device等效。

  详细说明查看man systemctl.unit

  立刻激活某个Unit

  $ systemctl start unit

  立刻去激活某个unit

  $ systemctl stop unit