Linux 系统管理员使用 systemd 可以做的 3 件令人惊讶的事情

它不仅仅用于加快计算机启动速度。下载我们为 Linux 系统管理员准备的全新 systemd 电子书,了解更多技巧。
3 位读者喜欢这篇文章。
Why the operating system matters even more in 2017

Internet Archive Book Images。由 Opensource.com 修改。CC BY-SA 4.0

当 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

您还可以仅查看用户空间进程,或仅查看用户空间进程和内核线程。

这绝不是 topps 的替代品,但它是从不同且独特的角度了解您的系统的另一种视角。当运行容器时,它可能至关重要,因为容器使用 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 实用指南中学习基础知识以及许多有用且实用的技巧。

Avatar
我喜欢我的隐私。

2 条评论

Systemd 可能是 Linux 历史上最糟糕的事情之一。它用一个或两个页面就可以完全描述的简单易懂的启动过程(无论是 BSD 还是 SystemV),我可以在一次讲座中向学生解释并让他们掌握,变成了这个像九头蛇一样的怪物,当它工作时可以提高启动速度,但却让我的一个 Ubuntu Linux 系统在 Ubuntu 升级后无法始终如一地完成启动。我真的希望它永远不会强加给普通的桌面用户,他们通常根本不需要它的所有复杂性,并且如果他们遇到问题就会束手无策。在那个 Ubuntu 系统上,当我访问论坛查看是否有人知道可能出了什么问题时,普遍的答案是,令人无法接受地,重新安装系统。那是结束我使用 Linux 桌面的原因,尽管我仍然有一个 Linux 防火墙和一个 Linux 系统来支持我的气象站和网络服务。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.