systemctl介绍
声明:本文转载自:systemd (简体中文)
基本工具分析系统状态显示 系统状态: $ systemctl status
输出激活的单元: $ systemctl
以下命令等效: $ systemctl list-units
输出运行失败的单元: $ systemctl --failed
所有可用的单元文件存放在 /usr/lib/systemd/system/ 和 /etc/systemd/system/ 目录(后者优先级更高)。查看所有已安装服务: $ systemctl list-unit-files
使用单元一个单元配置文件可以描述如下内容之一:系统服务(.service)、挂载点(.mount)、sockets(.sockets) 、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)、由 systemd 管理的计时器(.timer)。详情参阅 man 5 systemd.unit。
立即激活单元: # systemctl start <单元>
立即停止单元: # systemctl stop <单元>
重启单元: # systemctl restart <单元>
重新加载配置: # systemctl reload <单元>
输出单元运行状态: $ systemctl status <单元>
检查单元是否配置为自动启动: $ systemctl is-enabled <单元>
开机自动激活单元: # systemctl enable <单元>
取消开机自动激活单元: # systemctl disable <单元>
禁用一个单元(禁用后,间接启动也是不可能的): # systemctl mask <单元>
取消禁用一个单元: # systemctl unmask <单元>
显示单元的手册页(必须由单元文件提供): # systemctl help <单元>
重新载入 systemd,扫描新的或有变动的单元: # systemctl daemon-reload
电源管理安装 polkit 后才可以一般用户身份使用电源管理。 $ systemctl reboot
退出系统并停止电源: $ systemctl poweroff
待机: $ systemctl suspend
休眠: $ systemctl hibernate
混合休眠模式(同时休眠到硬盘并待机): $ systemctl hybrid-sleep
编写单元文件systemd 单元文件的语法来源于 XDG桌面入口配置文件.desktop文件,最初的源头则是Microsoft Windows的.ini文件。单元文件可以从两个地方加载,优先级从低到高分别是:
单元文件的语法,可以参考系统已经安装的单元,也可以参考man systemd.service中的EXAMPLES章节。
处理依赖关系使用systemd时,可通过正确编写单元配置文件来解决其依赖关系。典型的情况是,单元A要求单元B在A启动之前运行。在此情况下,向单元A配置文件中的 [Unit] 段添加 Requires=B 和 After=B 即可。若此依赖关系是可选的,可添加 Wants=B 和 After=B。请注意 Wants= 和 Requires= 并不意味着 After=,即如果 After= 选项没有制定,这两个单元将被并行启动。 服务类型编写自定义的 service 文件时,可以选择几种不同的服务启动方式。启动方式可通过配置文件 [Service] 段中的 Type= 参数进行设置。
type的更多解释可以参考 systemd.service(5)。 修改现存单元文件为了避免和 pacman 冲突,不应该直接编辑软件包提供的文件. 要更改由软件包提供的单元文件,先创建名为 /etc/systemd/system/<单元名>.d/ 的目录(如 /etc/systemd/system/httpd.service.d/),然后放入 *.conf 文件,其中可以添加或重置参数。这里设置的参数优先级高于原来的单元文件。例如,如果想添加一个额外的依赖,创建这么一个文件即可: /etc/systemd/system/<unit>.d/customdependency.conf
[Unit]
Requires=<新依赖>
After=<新依赖>
As another example,in order to replace the ExecStart directive for a unit that is not of type oneshot,create the following file: /etc/systemd/system/unit.d/customexec.conf
[Service]
ExecStart=
ExecStart=new command
想知道为什么修改 ExecStart 前必须将其置空,参见 ([1]). /etc/systemd/system/unit.d/restart.conf
[Service]
Restart=always
RestartSec=30
然后运行以下命令使更改生效: # systemctl daemon-reload
# systemctl restart <单元>
此外,把旧的单元文件从 /usr/lib/systemd/system/ 复制到 /etc/systemd/system/,然后进行修改,也可以达到同样效果。在 /etc/systemd/system/ 目录中的单元文件的优先级总是高于 /usr/lib/systemd/system/ 目录中的同名单元文件。注意,当 /usr/lib/ 中的单元文件因软件包升级变更时,/etc/ 中自定义的单元文件不会同步更新。此外,你还得执行 systemctl reenable ,手动重新启用该单元。因此,建议使用前面一种利用 *.conf 的方法。
安装 vim-systemd 软件包,可以使 unit 配置文件在 Vim 下支持语法高亮。 目标(target)启动级别(runlevel)是一个旧的概念。现在,systemd 引入了一个和启动级别功能相似又不同的概念——目标(target)。不像数字表示的启动级别,每个目标都有名字和独特的功能,并且能同时启用多个。一些目标继承其他目标的服务,并启动新服务。systemd 提供了一些模仿 sysvinit 启动级别的目标,仍可以使用旧的 telinit 启动级别 命令切换。 获取当前目标不要使用 runlevel 命令了: $ systemctl list-units --type=target
创建新目标在 Fedora 中,启动级别 0、1、3、5、6 都被赋予特定用途,并且都对应一个 systemd 的目标。然而,没有什么很好的移植用户定义的启动级别(2、4)的方法。要实现类似功能,可以以原有的启动级别为基础,创建一个新的目标 /etc/systemd/system/<新目标>(可以参考 /usr/lib/systemd/system/graphical.target),创建 /etc/systemd/system/<新目标>.wants 目录,向其中加入额外服务的链接(指向 /usr/lib/systemd/system/ 中的单元文件)。 目标表
切换启动级别/目标systemd 中,启动级别通过“目标单元”访问。通过如下命令切换: # systemctl isolate graphical.target
该命令对下次启动无影响。等价于telinit 3 或 telinit 5。 修改默认启动级别/目标开机启动进的目标是 default.target,默认链接到 graphical.target (大致相当于原来的启动级别5)。可以通过内核参数更改默认启动级别:
另一个方法是修改 default.target。可以通过 systemctl 修改它: # systemctl set-default multi-user.target
要覆盖已经设置的default.target,请使用 force: # systemctl set-default -f multi-user.target
可以在 systemctl 的输出中看到命令执行的效果:链接 /etc/systemd/system/default.target 被创建,指向新的默认启动级别。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |