systemd的简单运用

Scroll Down

来源:NanCheung`s Blog
链接:https://blog.nancheung.com /archives/414023
商业转载请联系作者获得授权,非商业转载请注明出处。



什么是systemd?

systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序。功能包括:支持并行化任务;同时采用 socket 式与 D-Bus 总线式激活服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点和自动挂载点;各服务间基于依赖关系进行精密控制。systemd 支持 SysV 和 LSB 初始脚本,可以替代 sysvinit。除此之外,功能还包括日志进程、控制基础系统配置,维护登陆用户列表以及系统账户、运行时目录和设置,可以运行容器和虚拟机,可以简单的管理网络配置、网络时间同步、日志转发和名称解析等。

systemd 基本工具

监视和控制systemd的主要命令是systemctl。该命令可用于查看系统状态和管理系统及服务。详见systemctl(1)

提示:

  • systemctl 参数中添加 -H <用户名>@<主机名> 可以实现对其他机器的远程控制。该功能使用 SSH 连接。
  • Plasma 用户可以安装 systemctl 图形前端 systemd-kcmAUR。安装后可以在 System administration 下找到。

分析系统状态

显示系统状态

systemctl status

输出激活的单元

systemctl

以下命令等效:

systemctl list-units

输出运行失败的单元

systemctl --failed

查看所有已安装服务

所有可用的单元文件存放在 /usr/lib/systemd/system//etc/systemd/system/ 目录(后者优先级更高)。

systemctl list-unit-files

显示 cgroup slice, 内存和父 PID

systemctl status pid

使用单元

一个单元配置文件可以描述如下内容之一:系统服务(.service)、挂载点(.mount)、sockets(.sockets) 、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)、由 systemd 管理的计时器(.timer)。详情参阅 systemd.unit(5)

使用 systemctl 控制单元时,通常需要使用单元文件的全名,包括扩展名(例如 sshd.service )。但是有些单元可以在 systemctl 中使用简写方式。

  • 如果无扩展名,systemctl 默认把扩展名当作 .service 。例如 netcfgnetcfg.service 是等价的。
  • 挂载点会自动转化为相应的 .mount 单元。例如 /home 等价于 home.mount
  • 设备会自动转化为相应的 .device 单元,所以 /dev/sda2 等价于 dev-sda2.device

注意: 有一些单元的名称包含一个 @ 标记(例如: [email protected]*string*.service ),这意味着它是模板单元 [email protected] 的一个 实例*string* 被称作实例标识符,在 systemctl 调用模板单元时,会将其当作一个参数传给模板单元,模板单元会使用这个传入的参数代替模板中的 %I 指示符。

在实例化之前,systemd 会先检查 [email protected] 文件是否存在(如果存在,就直接使用这个文件,而不是模板实例化)。大多数情况下,包含 @ 标记都意味着这个文件是模板。如果一个模板单元没有实例化就调用,该调用会返回失败,因为模板单元中的 %I 指示符没有被替换。

提示:

  • 下面的大部分命令都可以跟多个单元名, 详细信息参见 systemctl(1)
  • systemctl命令在enabledisablemask子命令中增加了--now选项,可以实现激活的同时启动服务,取消激活的同时停止服务。
  • 一个软件包可能会提供多个不同的单元。如果你已经安装了软件包,可以通过pacman -Qql *package* | grep systemd命令检查这个软件包提供了哪些单元。

启动单元

systemctl start <单元>

停止单元

systemctl stop <单元>

重启单元

systemctl restart <单元>

重新加载配置

systemctl reload <单元>

输出单元运行状态

systemctl status <单元>

输出单元运行状态

systemctl status <单元>

检查单元是否配置为自动启动

systemctl is-enabled <单元>

开机自动启动单元

systemctl enable <单元>

设置单元为自动启动并立即启动这个单元

systemctl enable --now <单元>

取消开机自动启动单元

systemctl disable <单元>

禁用一个单元

禁用后,间接启动也是不可能的

systemctl mask <单元>

取消禁用一个单元

systemctl unmask <单元>

显示单元的手册页

必须由单元文件提供

systemctl help <单元>

重新载入 systemd 系统配置,扫描单元文件的变动

注意这里不会重新加载变更的单元文件。参考上面的 reload 示例。

systemctl daemon-reload

相关资料

维基百科