首页 > 代码库 > 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