当 systemd 最初开始时,有很多关于它的新闻报道,以及它加速启动时间的能力。这个功能具有几乎普遍的吸引力(对于那些不重启的人来说不太重要),所以在很多方面,这仍然是它今天的声誉。虽然 systemd 确实是在启动期间并行启动服务的东西,但它的功能远不止于此。以下是您可能没有意识到 systemd 可以做到但应该利用的三件事。从我们新的可下载电子书systemd 实用指南中获取更多技巧。
1. 简化 Linux ps
如果您曾经使用过 ps
甚至只是 top
命令,那么您就会知道您的计算机在任何给定时刻都在运行数百个进程。有时,这正是您需要的信息类型,以便了解您的计算机或其用户在做什么。其他时候,您真正需要的只是一个总体概述。
systemd-cgtop
命令根据任务已被安排到的 cgroup(控制组)提供计算机负载的简单视图。控制组对于现代 Linux 非常重要,并且本质上是容器和 Kubernetes 底下的支持结构(这反过来又是云扩展方式的原因),但它们也是您家用 PC 上的有用结构。例如,从 systemd-cgtop
的输出中,您可以看到用户进程相对于系统进程的负载
Control Group Proc+ %CPU Memory Input/s Output/s
/ 183 5.0 1.6G 0B 3.0M
user.slice 4 2.8 1.1G 0B 174.7K
user.slice/user-1000.slice 4 2.8 968.2M 0B 174.7K
system.slice 65 2.2 1.5G 0B 2.8M
您还可以仅查看您的用户空间进程,或仅查看您的用户空间进程和内核线程。
这绝不是 top
或 ps
的替代品,但它是从不同且独特的角度查看您的系统的另一种方式。当运行容器时,它可能至关重要,因为容器使用 cgroup。
2. Linux cron
Cron 是 Linux 的经典组件。当您想要定期安排某事发生时,您可以使用 cron。它可靠且与您的系统集成良好。
问题是,cron 不了解有些计算机会被关闭。如果您有一个计划在午夜运行的 cron 作业,但您每天 23:59 关闭计算机,那么您的 cron 作业永远不会运行。cron 没有工具来检测到有遗漏的夜间作业。
作为对该问题的解答,有出色的 anacron,但它不如 cron 集成。您需要进行大量设置才能使 anacron 运行。
第二个替代方案是 systemd 计时器。与 cron 一样,它已经内置并准备就绪。您必须编写一个单元文件,这肯定比单行 crontab 条目多行,但它也很简单。例如,这是一个单元文件,用于在启动后 30 分钟运行一个假想的备份脚本,但每天只运行一次。这确保了我的计算机得到备份,并防止它尝试每天备份多次。
[Unit]
Description=Backup
Requires=myBackup.service
[Timer]
OnBootSec=30min
OnUnitActiveSec=1d
[Install]
WantedBy=timers.target
当然,您可以干预并提示作业运行。感谢 OnUnitActiveSec
指令,systemd 不会尝试运行您手动激活的作业。
3. 运行 Linux 容器
容器使启动复杂的服务变得非常容易。您可以在几分钟内运行 Mattermost 或 Discourse 服务器。在某些情况下,困难的部分是管理和监控运行后的容器。Podman 使管理它们变得容易,但是用什么来管理 Podman 呢?嗯,您可以使用 systemd。
Podman 有一个内置命令来生成单元文件,以便您的容器可以由 systemd 管理和监控
$ podman generate systemd --new --files --name example_pod
然后您所要做的就是启动服务
$ systemctl --user start pod-example_pod.service
与计算机上的任何其他服务一样,systemd 确保您的 pod 无论如何都能运行。它记录问题,您可以使用 journalctl
以及其他基本日志查看这些问题,并且您可以使用 systemd-cgtop
在 cgroup 中监控其活动。
它不是 Kubernetes 平台,但对于您只想在可靠且可预测的基础上提供的一个或两个容器,Podman 和 systemd 是绝佳的组合。
下载 systemd 电子书
systemd 还有很多内容,您可以从作者 David Both 的新免费systemd 实用指南中学习基础知识以及许多有用的实用技巧。
2 条评论