Systemd 工具集

除了整齐划一的 Unit 文件,Systemd 的魔力还体现在它自带的一套犹如百宝箱一样的工具集上。

命令 功能
systemctl 用于检查和控制各种系统服务和资源的状态
bootctl 用于查看和管理系统启动分区
hostnamectl 用于查看和修改系统的主机名和主机信息
journalctl 用于查看系统日志和各类应用服务日志
localectl 用于查看和管理系统的地区信息
loginctl 用于管理系统已登录用户和 Session 信息
machinectl 用于操作 Systemd 容器
timedatectl 用于查看和管理系统的时间和时区信息
systemd-analyze 显示此次系统启动时运行每个服务所消耗的时间,可以用于分析系统启动过程中的性能瓶颈
systemd-ask-password 辅助性工具,用幸好遮障用户的任意输入,然后返回实际输入的内容
systemd-cat 用于将其它命令的输出重定向到系统日志
systemd-cgls 递归地显示指定 CGroup 的继承链
systemd-cgtop 显示系统当前最耗资源的 CGroup 单元
systemd-escape 辅助性工具,用于去除指定字符串中不能作为 Unit 文件名的字符
systemd-hwdb Systemd 的内部工具,用于更新硬件数据库
systemd-delta 对比当前系统配置与默认系统配置的差异
systemd-detect-virt 显示主机的虚拟化类型
systemd-inhibit 用于强制延迟或禁止系统的关闭、睡眠和待机时间
systemd-machine-id-setup Systemd 的内部工具,用于给 Systemd 容器生成 ID
systemd-notify Systemd 的内部工具,用于通知服务的状态变化
systemd-nspawn 用于创建 Systemd 容器
systemd-path Systemd 的内部工具,用于显示系统上下文中的各种路径配置
systemd-run 用于将任意指定的命令包装成一个临时的后台服务运行
systemd-stdio-bridge Systemd 的内部工具 ,用于将程序的标准输入输出重定向到系统总线
systemd-tmpfiles Systemd 的内部工具,用于创建和管理临时文件
systemd-tty-ask-password-agent 用于响应后台服务进程发出的输入密码请求

主机名、时间、地区信息管理

hostnamectl 显示主机名

hostnamectl set-hostname xxx 设置主机名

–host 和 –machine 参数可以远程查看和修改另一个主机或容器。

timedatectl 和 localectl 作用类似

电源管理

systemctl poweroff | halt 关机

systemctl reboot 重启

systemctl suspend 待机

systemctl hibernate 休眠

启动时间和运行状态分析

systemd-analyze time 打印最近一次启动消耗的时间

systemd-analyze blame | head 按启动耗时长短排序

systemd-analyze plot 生成详细 SVG 图

systemd-analyze dump 打印当前所有 Unit 状态

systemd-analyze dot 生成系统中所有 Unit 的依赖关系图

systemd-anylyze set-log-level emerg | alert | crit | err | warning | notice | info | debug

systemd-analyze verify xxx 检测 Unit 文件格式正确性

辅助性命令工具

systemd-ask-password
1
2
3
4
$ PASSWORD=$(systemd-ask-password "Hint test here:")
Hint test here: ***
$ echo $(PASSWORD)
abc
systemd-run
1
$ sudo systemd-run --uid=root --gid=root du -sh /*

当服务正常结束后(返回值为 0)会自动从 Systemd 的记录中消失,但其留下的日志仍然可以通过 journalctl 查看到。反之,如果服务异常结束(返回值非 0),则这个服务的记录会继续留在 Systemd 中,可以通过 “systemctl list-units”命令查看到。

$ sudo systemd-run --on-active=30 --time-property=AccuracySec=100ms /bin/touch/tmp/time-up生成临时定时器。

此时系统创建了两个临时的 Unit 文件。需要注意一点,其中的服务 Unit 文件会在定时器时间到时,且响应的任务顺利完成后自动删除。然后,定时器的 Unit 文件并不会随着任务的完成而自动消失,需要手工执行“systemctl stop”命令来移除。

systemctl reset-failed命令可以用来清理失败的临时服务。